Недавно начал изучать SQL и столкнулся с этой проблемой, что я не могу найти решение. Я пытаюсь собрать данные из нескольких баз данных и выводить их в одну таблицу. ДанныеTSQL Сбор данных из нескольких баз данных
Источник выберите выходы в две колонки и «имя источника дб» «acAcct»
Целевая таблица имеет «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, ''?'')
Выбор работает нормально.
EDIT:
Законченное с этим:
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
Оригинальный сценарий заполняется только первый столбец и ошибочный на других.
Какое имя столбца вы пытаетесь вставить в '_utility.dbo.konta'? Различие для каждой БД? У вас действительно достаточно баз данных, а новые добавляются достаточно часто, чтобы потребовать использовать Dynamic SQL для этого процесса? – GarethD
лучший предмет - это сломан. Делает ли выбор самостоятельно? Является ли ИФ на своей собственной работе? –
В «_utility.dbo.konta» имеется около 30 баз данных, а имена баз данных соответствуют именам столбцов. – Marko