T-SQL: могу ли я использовать переменную в качестве ссылки на базу данных - PullRequest
6 голосов
/ 28 сентября 2010

Я хочу сделать это:

update @sourceDatabase.dbo.PredictedPrices

и затем установить @sourceDatabase в качестве переменной.

Но я не могу?

Incorrect syntax near '.'.

Есть ли другой способ?

Ответы [ 3 ]

8 голосов
/ 28 сентября 2010
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;
5 голосов
/ 28 сентября 2010

Для этого необходимо использовать SP_ExecuteSQL.т.е. динамическое выполнение запроса

Пример:

EXECUTE sp_executesql 
          N'SELECT * FROM AdventureWorks2008R2.HumanResources.Employee 
          WHERE BusinessEntityID = @level',
          N'@level tinyint',
          @level = 109;
4 голосов
/ 28 сентября 2010

Если вы запускаете этот сценарий в SSMS, вы можете использовать Режим SQLCMD (находится в меню «Запрос») для создания сценария переменной для имени вашей базы данных:

:setvar sourceDatabase YourDatabaseName

update $(sourceDatabase).dbo.PredictedPrices
    set ...
...