我的客户每年创建一个新表,其中包含要在我的SQL Server数据库新视图中使用的名称中的年份。 我已经通过一个查询解决了这个问题:
DECLARE @SQLString nvarchar(500)
SET @SQLString = 'SELECT * FROM [MYDATABASE].[dbo].[MYTABLE_'+cast(YEAR(GETDATE()) as varchar(4))+']'
EXECUTE sp_executesql @SQLString
但是我不能在视图中使用execute语句。我也尝试将其移至函数,但问题是相同的。 ¿我该怎么办?
谢谢。
答案 0 :(得分:0)
我不知道这是否适合您,但是您可以动态创建视图本身。像这样:
declare @sql varchar(1000)
,@sql2 varchar(1000)
set @sql = ('create view x as select * from MyTable_' + convert(varchar(10),year(getdate())) + ' go')
set @sql2 = 'select * from x'
exec (@sql)
exec (@sql2)
答案 1 :(得分:0)
由于视图仅引用“最新”表,因此可以使用同义词引用该表:
create synonym dbo.CurrentYearVendorTable for dbo.VendorStuffFor2019;
create view dbo.MyView as
select *
from dbo.CurrentYearVendorTable; -- Note: Reference to synonym, not table.
创建新表后,替换同义词并更新视图:
drop synonym dbo.CurrentYearVendorTable;
create synonym dbo.CurrentYearVendorTable for dbo.VendorStuffFor2020;
execute sp_refreshview @viewname = 'dbo.MyView';
对于其他用途,可能只需要在查询中使用同义词即可。