TSQL 从多个数据库中收集数据

TSQL Collect data from multiple databases

最近开始学习 SQL 和 运行 这个我找不到解决方案的问题。 我正在尝试从多个数据库收集数据并将其输出到单个 table.

Source select 在两列中输出数据 "acAcct" 和 "name of source db"

目标 table 每个数据库都有 "acAcct" 和列。

我想出的东西:

DECLARE @command varchar(1000)
SET  @command = 'IF ''[?]'' NOT IN (''[master]'', ''[model]'', ''[msdb]'', ''[tempdb]'')

 INSERT INTO _utility.dbo.konta (acAcct, ''?'')
 SELECT DISTINCT AC.acAcct
                ,AD.acName AS ''?''                 
                        from tHE_AcctTransItem as AC
                        LEFT JOIN vDE_SetAccount as AD 
                        ON AC.acAcct = AD.acAcct'

EXEC sp_MSforeachdb @command

我对每个数据库都收到此错误:

Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'name of DB'.

我想我在解析变量时遗漏了一些东西:

INSERT INTO _utility.dbo.konta (acAcct, ''?'')

Select 工作正常。

编辑:

最后是这样的:

DECLARE @command varchar(1000)
SET  @command = 'IF ''[?]'' NOT IN (''[master]'', ''[model]'', ''[msdb]'', ''[tempdb]'')

MERGE  _utility.dbo.konta AS target
 USING (SELECT DISTINCT AC.acAcct
                ,AD.acName AS [?]                   
                        from [?].dbo.tHE_AcctTransItem as AC
                        LEFT JOIN [?].dbo.vDE_SetAccount as AD 
                        ON AC.acAcct = AD.acAcct) as source
    ON (target.acAcct = source.acAcct)
        WHEN MATCHED THEN UPDATE SET target.[?] = source.[?]
        WHEN NOT MATCHED THEN
            INSERT (acAcct, [?])
            VALUES (source.acAcct, [?]);
            '
EXEC sp_MSforeachdb @command

原始脚本只填充了第一列,其他列出错了。

如果源数据库名称是一列,则不应将其括在单引号中。方括号会更安全。

DECLARE @command varchar(1000)
SET  @command = 'IF ''[?]'' NOT IN (''[master]'', ''[model]'', ''[msdb]'', ''[tempdb]'')

 INSERT INTO _utility.dbo.konta (acAcct, [?])
 SELECT DISTINCT AC.acAcct
        ,AD.acName AS [?]                 
            from tHE_AcctTransItem as AC
            LEFT JOIN vDE_SetAccount as AD 
            ON AC.acAcct = AD.acAcct'

EXEC sp_MSforeachdb @command