以下のスクリプトの目的は、各サーバーからのデータベースサイズとデータベースの数の合計を集計し、合計して総計します。私は、コードを実行するとき動的SQLのUNION - TSQL
DECLARE @LinkedServer VARCHAR(100)
DECLARE @SQL1 NVARCHAR(MAX)
DECLARE @SQL2 NVARCHAR(MAX)
DECLARE @TotalDB NVARCHAR(1000)
DECLARE @TotalSize NVARCHAR(1000)
DECLARE @LineSpace VARCHAR(100)
DECLARE @Union1 VARCHAR(200)
DECLARE @Union2 VARCHAR(200)
SELECT @LinkedServer = MIN(name)
FROM ServerwithLinkedServers.master.sys.servers
WHERE name IN ('ServerName1',
'ServerName2',
'ServerName3')
WHILE @LinkedServer IS NOT NULL
BEGIN
SET @TotalDB = 'SELECT COUNT(*) AS [Total Retailer Databases] FROM '+ @LinkedServer +'.master.sys.databases';
SET @Union1 = @TotalDB + ' UNION ' + @TotalDB;
SET @TotalSize = 'SELECT CAST(SUM(size) * 8.00/1024.00/1024.00 AS DECIMAL(9,2)) AS [Total Size GB] FROM '+ @LinkedServer +'.master.sys.master_files';
SET @Union2 = @TotalSize + ' UNION ' + @TotalSize;
EXEC (@Union1);
EXEC (@Union2);
SELECT @LinkedServer = MIN(name)
FROM ServerwithLinkedServers.master.sys.servers
WHERE name IN ('ServerName1',
'ServerName2',
'ServerName3')
AND name > @LinkedServer
END
print @union1
print @union2
しかし、私はというエラーを取得しています:
Unclosed quotation mark after the character string 'T'.
Incorrect syntax near 'T'.
私は何をしないのですか?または私は何を間違っているのですか?
実行する代わりにステートメントを印刷して調べます。エラーメッセージがはっきりと言う - あなたはどこかで引用符を見逃しました。 –
なぜあなたはここでループしていますか?そして、リモートシステムからデータを引き出すポイントは何ですか?とにかく値をハードコーディングしているので、サーバーのリストを読むのは本当に意味がありません(そのうちの1つがリモートサーバーから削除されていない限り)。そして、各サーバーからデータベースの数を2回取得しています。このすべてのことは非常に簡単にループすることなく書き直すことができましたが、何をしようとしているのか分かりません。 –
リンクされたサーバーの一部がもう動作しないため(一部のサーバーは廃止されているため)、ハードコードされたServerNamesを用意する必要があります。スクリプトは、サーバごとにデータベースの数を取得し、同時にサイズを取得すると仮定しています。そして、UNIONを一括して合計します。ループを使用せずにこのスクリプトを書き直すにはどうすればよいですか? – AznDevil92