我需要将数据从链接服务器传输到我们的主SQL服务器。问题是,表名每天都在变化。
我查看了这个网站,看看它是否有可能有一个可变数据库名称,它也是,但也看看是否有可能在OPENQUERY
中有变量,它也是。 / p>
但我正在努力将这些需求结合起来,所以我在OPENQUERY
中有一个变量表名。
我需要这样的东西:
Declare @LinkedServer as varchar(max) = 'LinkedServer'
Declare @TName as varchar(max) = 'TName'+substring(cast(cast(getdate() as date) as
varchar(50)),1,4)+substring(cast(cast(getdate() as date) as
varchar(50)),6,2)+substring(cast(cast(getdate() as date) as
varchar(50)),9,2)
SELECT * FROM OPENQUERY(@LinkedServer, 'SELECT * FROM dbo.@TName')
有什么方法可以在OPENQUERY
中创建变量表名吗?
感谢您的帮助。
/的Mikkel
答案 0 :(得分:1)
我会写一个同义词,在您启动数据提取工作之前每天都会更新。然后,您不需要更新(可能是一吨)参考。
CREATE SYNONYM LinkedTableA
FOR
ServerName.DBName.dbo.TName20170331
SELECT * FROM LinkedTableA
答案 1 :(得分:0)
我的答案是:
USE [DataBase]
GO
DROP SYNONYM [dbo].[eCallByCallStat]
GO
declare @tablename varchar(50)
set @tablename = 'Server1..dbo.eCallByCallStat'+substring(cast(cast(getdate()-1 as date) as varchar(50)),1,4)+substring(cast(cast(getdate()-1 as date) as varchar(50)),6,2)+substring(cast(cast(getdate()-1 as date) as varchar(50)),9,2)
declare @sql varchar(500)
set @sql = 'CREATE SYNONYM [dbo].[eCallByCallStat] FOR ' + @tablename
exec (@sql)
这将运行每个早上更新同义词中的表名,然后我们将该数据插入到探测器表中,以便我们获得所有数据。