У меня есть 6 переменных, это: @SourceDatabase, @SourceSchema, @SourceTable, @TargetDatabase, @TargetSchema, @TargetTable
Я пишу запрос, который должен объединить значения из INFORMATION_SCHEMA.COLUMNS.
Как это:
SELECT a.COLUMN_NAME, b.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS a
LEFT OUTER JOIN INFORMATION_SCHEMA b
ON b.TABLE_SCHEMA = @SourceSchema
AND b.TABLE_NAME = @SourceTable
AND b.COLUMN_NAME = a.COLUMN_NAME
WHERE a.TABLE_SCHEMA = @TargetSchema
AND a.TABLE_NAME = @TargetTable
Однако после того, как я представил атрибуты базы данных, для сравнения баз данных, я просто заметил, что не думаю, что могу использовать тот же запрос, не делая его динамическим в качестве строки и помещая имя базы данных перед INFORMATION_SCHEMA. Как DECLARE @SQL nvarchar(254) = 'SELECT * FROM ' + @SourceDatabase + '.INFORMATION_SCHEMA ...'
. и т. д.
Поскольку я на самом деле не фанат динамического SQL, мне интересно, есть ли у вас, ребята, какие-нибудь умные решения, чтобы делать то, что я пытаюсь сделать, не переходя в динамический режим?