2016-10-31 67 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 
... 
.. 

但是,如果你打算使用此代码为长期再避免使用sp_MSForeachdb,此对象没有记录,并且不支持由Microso英尺尝试使用Loop或Cursor来替换您的代码(因为可以考虑数据库的数量,所以不应该出现问题)。