SQL OpenQuery变量tablename

时间:2017-03-31 10:03:56

标签: sql sql-server tsql openquery

我需要将数据从链接服务器传输到我们的主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

2 个答案:

答案 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)

这将运行每个早上更新同义词中的表名,然后我们将该数据插入到探测器表中,以便我们获得所有数据。