簡體   English   中英

執行動態 sql 查詢的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM