2016-10-31 14 views
1

私がここで達成したいのは、CheckSum_Agg(Binary_CheckSum(*))の結果を得て、一致するテーブルTABLE_NAMEに書き込むことです。変数からクエリ結果をテーブルに書き込む方法

以下のクエリは私が思いついたものですが、クエリ結果をテーブルに書き込むための次のステップがありません。

DROP TABLE HashTable 
CREATE TABLE HashTable 
    (
     HashTable nvarchar (255), 
     TABLE_NAME nvarchar (255) 
    ) 

INSERT HashTable 
EXEC master..sp_MSForeachdb 'USE [?] 
IF DB_ID(''?'') > 4 
SELECT ''SELECT CheckSum_Agg(Binary_CheckSum(*)) AS HashTable FROM '' + TABLE_CATALOG + ''.'' + ''dbo'' + ''.'' + TABLE_NAME AS HashTable 
,TABLE_NAME AS TABLE_NAME 
FROM ?.INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = ''BASE TABLE'' 
' 

私は十分にはっきりしていなかったと思うので、質問を更新しました。

SELECT CheckSum_Agg(Binary_CheckSum(*)) AS HashTable FROM DatabaseX.dbo.tblX:私は今取得

結果のようなものです。 望ましい結果は、1971451のようなチェックサム値そのものです。

おかげで、

答えて

0
IF EXISTS(SELECT 1 FROM sys.objects WHERE type = 'U' and name = 'testHashTable') 
    DROP TABLE testHashTable 

CREATE TABLE testHashTable 
    (
     HashTable nvarchar (255), 
     TABLE_NAME nvarchar (255) 
    ) 
GO 
INSERT INTO testHashTable 
EXEC master..sp_MSForeachdb 'USE [?] 
IF DB_ID(''?'') > 4 
SELECT ''SELECT CheckSum_Agg(Binary_CheckSum(*)) AS HashTable FROM '' + TABLE_CATALOG + ''.'' + ''dbo'' + ''.'' + TABLE_NAME AS HashTable 
,TABLE_NAME AS TABLE_NAME 
FROM ?.INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = ''BASE TABLE'' 
' 
0

あなたは、次の方法を使用することができます:あなたは回避長期的にこのコードを使用することを計画している場合は、

INSERT INTO testHashTable 
EXEC master..sp_MSForeachdb 'USE [?] 
..... 

OR

EXEC master..sp_MSForeachdb 'USE [?] 
IF DB_ID(''?'') > 4 
INSERT INTO master.dbo.testHashTable 
... 
.. 

をBUT sp_MSForeachdbを使用して、このオブジェクトは文書化されておらず、Microso ft。 LoopまたはCursorを使用してコードを置き換えてください(データベースの数を考慮できるので問題はありません)。

関連する問題