将变量设置为模式

时间:2013-12-03 21:11:53

标签: sql-server

我有一个查询,我希望能够跨数据库模式使用。现在它被编写,以便我需要在查询的几个位置替换模式。如何将其设置为变量,以便我需要做的就是在一个地方进行更改?

3 个答案:

答案 0 :(得分:1)

您可以使用Dynamic SQL执行此操作:

DECLARE @sql VARCHAR(MAX)
       ,@schema VARCHAR(255) = 'dbo'
SET @sql = 'SELECT *
            FROM '+@schema+'.yourTable
           '
EXEC (@sql)

您可以在游标中使用它来遍历架构:

DECLARE @Iterator varchar(255)
        ,@strSQL varchar(MAX) 
DECLARE xyz CURSOR
FOR
--Select stuff to iterate over
        SELECT name
        FROM  sys.schemas
OPEN xyz 
FETCH NEXT FROM xyz 
INTO @Iterator 
WHILE @@FETCH_STATUS = 0
BEGIN
--Do stuff
SET @strSQL = 'SELECT *
                FROM '+@Iterator+'.yourTable
               '
Exec (@strSQL)
    FETCH NEXT FROM xyz 
    INTO @Iterator 
END
CLOSE xyz 
DEALLOCATE xyz 
GO

要测试动态SQL语句,您可以将EXEC更改为PRINT,并确保生成的查询符合您的预期。

答案 1 :(得分:0)

同义词可能是您问题的答案。

答案 2 :(得分:0)

您可以使用动态SQL。这是一个例子 -

DECLARE @Column varchar(25)
DECLARE @sqlStmt varchar(max)
SET @Column = 'MyColumn' 
SET @sqlStmt = N'SELECT ' + @Column + ' FROM MyTable'
EXEC (@sqlStmt)