Я знаю, что это не идеально, но я хотел бы знать, возможно ли заполнить временную таблицу на основе динамического sql?
Очень похожий пример того, чего я хочу достичь, показан в этом ответе как либо
SELECT into #T1 execute ('execute ' + @SQLString )
or
INSERT into #T1 execute ('execute ' + @SQLString )
Я не мог заставить ни работать. Судя по редактированию, первый вариант был неправильным, поэтому для второго варианта я попробовал что-то вроде;
DECLARE @SQLString VARCHAR (2000) = 'SELECT * FROM INFORMATION_SCHEMA.COLUMNS'
INSERT into #MyTempTable execute (@SQLString )
Любые идеи высоко ценятся.
Изменить:
В попытке прояснить, что я пытаюсь сделать, не слишком локализуя себя, я объясню ниже как можно короче.
У меня есть данные в промежуточной области моей базы данных, которая содержит таблицы с динамическими именами и динамическим количеством столбцов. Однако некоторые имена столбцов одинаковы для каждой таблицы. Вместо того, чтобы создавать все в динамическом sql, я хотел бы иметь возможность просто извлекать известные столбцы во временную таблицу (или табличную переменную, CTE, производную таблицу или что-то еще) и действовать в соответствии с этим.
Итак, таблица как таковая;
CREATE TABLE SomeParticularNameThatCantBeKnownToAStoredProc (
[1] AS VARCHAR(100),
[2] AS VARCHAR(100),
... -- Could be any number of these columns
[Id] AS INT,
[KnownCol] AS VARCHAR(100),
[KnownCol2] AS VARCHAR(100),
....
[DboId] AS INT
)
Я хотел бы иметь возможность выполнять необходимые операции, чтобы позволить мне обрабатывать эти данные без необходимости делать все это в динамическом sql. Я надеялся, что смогу сделать что-то вроде;
DECLARE @TableName AS VARCHAR(1000) = 'SomeParticularNameThatCantBeKnownToAStoredProc'
SELECT [Id], [KnownCol], [KnownCol2], [DboId]
INTO #KnownName
FROM @TableName -- I know this isn't possible, but this is what I'd like to do
Затем это позволило бы мне выполнять операторы SQL для согласованного #KnownName. Некоторые из других операций, которые мне нужно выполнить, довольно длительны, например, использование данных для связи с другими существующими таблицами, копирование данных из промежуточных таблиц в их эквиваленты схемы dbo и сопоставление DboId с идентификатором промежуточной таблицы с использованием MERGE с ВЫВОД В, как описано здесь и так далее и тому подобное.
Если вы можете придумать какой-либо другой способ ограничить объем динамического SQL, который мне нужно написать, учитывая тот факт, что имя таблицы является динамическим, пожалуйста, дайте мне знать.