[英]Issue executing Dynamic sql query
我有一組要跨多個數據庫執行的指令 SQL。 我目前有以下 SQL 代碼:
USE Database1
DECLARE @mySourceTable AS [someUserDefinedType];
/*Execute set of operations on Database 1 and @mySourceTable*/
DECLARE @dbList TABLE (DBName nvarchar(50));
INSERT INTO @dbList (DBName)
VALUES('Database2'),('Database3');
DECLARE @dbName nvarchar(50);
DECLARE dbCursor CURSOR FOR SELECT DBName FROM @dbList;
OPEN dbCursor;
FETCH NEXT FROM dbCursor INTO @dbName;
WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE('USE ' + @dbName + N';
DECLARE @content AS [someUserDefinedType];
INSERT INTO @content (ID)
SELECT ID FROM '+ @mySourceTable + N';
EXECUTE dbo.someProcedure @content;');
FETCH NEXT FROM dbCursor INTO @dbName;
END;
CLOSE dbCursor;
DEALLOCATE dbCursor;
基本上我想做以下事情:我有幾個數據庫,它們都具有相同的[someUserDefinedType]
表類型(具有相同的結構)和一個名為dbo.someProcedure
的過程,它接收所述類型的表作為參數( dbo.someProcedure
不同的數據庫是不一樣的,它是特定於每個數據庫的)。 我想通過提供的數據庫列表( @dbList
) go 並使用來自@mySourceTable
的數據執行每個存儲過程。 我不確定上面的代碼是否是最好的方法,它不起作用並給出錯誤:
必須聲明標量變量“@mySourceTable”。
此變量已在腳本開頭聲明。 我究竟做錯了什么? 是否可以使用變量從@mySourceTable
傳遞數據而不為它創建另一個表(我真的想避免這種情況)?
嘗試這樣的事情:
USE Database1
DECLARE @mySourceTable AS [someUserDefinedType];
/*Execute set of operations on Database 1 and @mySourceTable*/
DECLARE @dbList TABLE (DBName nvarchar(50));
INSERT INTO @dbList (DBName)
VALUES('Database2'),('Database3');
DECLARE @dbName nvarchar(50);
DECLARE dbCursor CURSOR FOR SELECT DBName FROM @dbList;
OPEN dbCursor;
FETCH NEXT FROM dbCursor INTO @dbName;
DECLARE @DynamicTSQLStatement NVARCHAR(MAX);
WHILE @@FETCH_STATUS = 0
BEGIN
SET @DynamicTSQLStatement = N'
USE ' + @dbName + ';
DECLARE @content AS [someUserDefinedType];
INSERT INTO @content (ID)
SELECT ID FROM @mySourceTable;
EXECUTE dbo.someProcedure @content;';
FETCH NEXT FROM dbCursor INTO @dbName;
EXEC sp_executesql @DynamicTSQLStatement, N'@mySourceTable someUserDefinedType readonly', @mySourceTable = @mySourceTable
END;
CLOSE dbCursor;
DEALLOCATE dbCursor;
當您使用sp_executesql
執行 T-SQL 語句時,您可以傳遞參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.