chcę osiągnąć to:T-SQL: mogę użyć zmiennej jako odniesienie bazy
update @sourceDatabase.dbo.PredictedPrices
a następnie ustawić @sourceDatabase
jako zmienna.
Ale nie wolno mi?
Incorrect syntax near '.'.
Czy istnieje inny sposób?
chcę osiągnąć to:T-SQL: mogę użyć zmiennej jako odniesienie bazy
update @sourceDatabase.dbo.PredictedPrices
a następnie ustawić @sourceDatabase
jako zmienna.
Ale nie wolno mi?
Incorrect syntax near '.'.
Czy istnieje inny sposób?
Aby to zrobić, musisz użyć SP_ExecuteSQL
. tj zapytania dynamiczne wykonanie
Przykład:
EXECUTE sp_executesql
N'SELECT * FROM AdventureWorks2008R2.HumanResources.Employee
WHERE BusinessEntityID = @level',
N'@level tinyint',
@level = 109;
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;
+1, ładny pełny przykład i użycie QUOTENAME() –
Jeśli używasz tego skryptu w SSMS, można użyć SQLCMD Mode (znajdujący się w menu Query) do skryptu zmienną do bazy danych Nazwa:
:setvar sourceDatabase YourDatabaseName
update $(sourceDatabase).dbo.PredictedPrices
set ...
Nice ........... – Michel
nie działa za to: EXECUTE sp_executesql N'update @ sourceDatabase.dbo.PredictedPrices ustawić MinPrice = MinPrice” – Michel
ten sam błąd: niepoprawna składnia w pobliżu "." – Michel
@Michel - Konieczne jest połączenie w łańcuch. Zobacz moją odpowiedź na przykład. –