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
最近开始学习 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