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