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