T-SQL将连接字符串声明为参数

时间:2016-11-07 22:10:55

标签: sql-server reporting-services

DECLARE @DBS nvarchar(32)
SET @DBS = 'Current' --'Archive'
SELECT TOP 100 *
  FROM [@DBS].[dbo].[table]

我有2个结构相同的数据库,它们位于同一台服务器上。一个只保存信息30天,快速报告处理,另一个保存多年的信息。如果我有Current.dbo.table或Archive.dbo.table,则任一查询都可以正常执行,但我想设置一个参数,以便我们可以在同一报表中切换当前和存档,这样用户就可以从存档数据库,无需具有管理员权限即可切换数据源连接字符串。这可能吗?我确定语法错误是因为连接字符串不是nvarchar,但我无法找出编写此查询的正确方法。

2 个答案:

答案 0 :(得分:0)

对于SQL Server,您需要动态SQL。

DECLARE @DBS nvarchar(32)
SET @DBS = 'Current' --'Archive'
DECLARE @SQL VARCHAR(MAX)
SET @SQL = '
SELECT TOP 100 *
  FROM ' + @DBS + '.[dbo].[table]'
EXEC(@SQL)

答案 1 :(得分:0)

你可以试试这个。 根据您的参数值,个人选择返回所有行或不返回任何行。

SELECT TOP 100 *
  FROM [DBS].[dbo].[table] -- Your active table schema
 where @yourParamenter= 0
union
SELECT TOP 100 *
  FROM [archiveDBS].[dbo].[table]   -- Your archive table schema
 where @yourParamenter= 1