簡體   English   中英

跨多個數據庫運行查詢

[英]Running a query across multiple databases

我最近問了一個有關進行查詢的問題 ,該查詢將在單獨的表中記錄測試查詢的結果。

但是,在上一個問題中我沒有問過一件事,看起來這件事已經足夠大了,可以簡單地提出一個新的話題。 此查詢(由Steve Mangiameli提供 ):

DECLARE @testStatus NVARCHAR(MAX);

IF (
    SELECT COUNT(*)
    FROM Table1
    WHERE Table1.Column1 = ''
) = 0
    SET @testStatus = 'Test Passed'
ELSE
    SET @testStatus = 'Test Failed'

INSERT INTO Table2 (FileName, Date, Result)
VALUES ('File1', GetDate(), @testStatus)

需要跨多個數據庫運行。 這是我使用另一個查詢執行的當前版本,該查詢執行類似的操作但此查詢不起作用。 編輯:更清楚地說,我收到一條錯誤消息`必須聲明標量變量“ @testStatus”。

DECLARE @dbname NVARCHAR(200);
DECLARE @testStatus NVARCHAR(MAX);
DECLARE @query NVARCHAR(MAX);

DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE name LIKE '%DBTag%'

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname

WHILE @@FETCH_STATUS = 0

BEGIN

SET @query = CAST('
IF (
    SELECT COUNT(*)
    FROM [' +@dbname+ '].dbo.Table1
    WHERE [' +@dbname+ '].dbo.Table1.Column1  = ''''
) = 0
    SET @testStatus = ''Test Passed''
ELSE
    SET @testStatus = ''Test Failed''

INSERT INTO [Database].dbo.Table2(FileName, Result, Date)
VALUES (''File1'', @testStatus, GETDATE())'
AS NVARCHAR(MAX))

EXECUTE (@query)

FETCH NEXT FROM db_cursor INTO @dbname

END
CLOSE db_cursor
DEALLOCATE db_cursor;

我想知道我什至嘗試進行這項工作的方式是否存在根本“錯誤”。

該變量在動態sql之外聲明。 執行動態sql時,變量超出范圍。 您可以通過在動態sql中再次聲明變量來輕松解決此問題。

SET @query = CAST('
declare @testStatus varchar(20);
IF (
    SELECT COUNT(*)
    FROM [' +@dbname+ '].dbo.Table1
    WHERE [' +@dbname+ '].dbo.Table1.Column1  = ''''
) = 0
    SET @testStatus = ''Test Passed''
ELSE
    SET @testStatus = ''Test Failed''

INSERT INTO [Database].dbo.Table2(FileName, Result, Date)
VALUES (''File1'', @testStatus, GETDATE())'
AS NVARCHAR(MAX))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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