如何将查询结果从变量写入表

时间:2016-10-31 10:27:35

标签: sql sql-server tsql variables

我想在这里实现的是从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

谢谢,

2 个答案:

答案 0 :(得分: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'' 
'

答案 1 :(得分: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 ,则此对象不会记录,也不受Microsoft支持。尝试使用循环或光标替换您的代码(不应该有问题,因为可以考虑数据库的数量。)。