T-SQL:我可以使用变量作为数据库引用

Mic*_*hel 6 sql t-sql sql-server sql-server-2005 dynamic-sql

我想完成这个:

update @sourceDatabase.dbo.PredictedPrices
Run Code Online (Sandbox Code Playgroud)

然后设置@sourceDatabase为变量.

但我不被允许?

Incorrect syntax near '.'.
Run Code Online (Sandbox Code Playgroud)

还有另外一种方法吗?

Mar*_*ith 8

DECLARE @Dynsql NVARCHAR(MAX)
DECLARE @sourceDatabase sysname
DECLARE @MinPrice MONEY

SET @sourceDatabase = 'foo'
SET @MinPrice = 1.00

SET @Dynsql =  N'update ' + QUOTENAME(@sourceDatabase) + '.dbo.PredictedPrices 
       set MinPrice = @MinPrice'


EXECUTE sp_executesql   @Dynsql,
                      N'@MinPrice money',
                        @MinPrice = @MinPrice;
Run Code Online (Sandbox Code Playgroud)

  • +1,很好的完整示例和使用QUOTENAME() (2认同)

Pra*_*ana 5

要做到这一点,你需要使用SP_ExecuteSQL.即动态查询执行

例:

EXECUTE sp_executesql 
          N'SELECT * FROM AdventureWorks2008R2.HumanResources.Employee 
          WHERE BusinessEntityID = @level',
          N'@level tinyint',
          @level = 109;
Run Code Online (Sandbox Code Playgroud)