Если функция возвращает таблицу, вы должны иметь возможность:
INSERT INTO @table (Col1, Col2) SELECT * FROM dbo.SOME_FUNCTION()
Вам нужно будет указать столбцы, которые вы собираетесь использовать для части INSERT или SELECTутверждение.
ОБНОВЛЕНИЕ:
Вот кое-что, что я придумал, чтобы вы могли найти столбцы.Первая часть - это включение вашего сервера, чтобы он мог возвращать и использовать сохраненные процессы, как если бы вы работали с обычной таблицей (уточните у своего администратора БД или у того, кто запускает сервер, что у них все в порядке с включенными этими параметрами).Вы выбираете свой набор результатов во временную таблицу, затем запускаете sp_columns
сохраненный процесс в tempdb
и вставляете его в другую временную таблицу (которую вы затем отбрасываете).Таким образом, вы, по крайней мере, знаете, какие у вас есть столбцы, и, возможно, сможете использовать его, чтобы упростить работу с динамическими именами столбцов.
sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
SELECT * INTO #ItemsTable FROM dbo.SOME_FUNCTION()
SELECT * INTO #Columns FROM OPENROWSET('SQLNCLI', 'Server=(local);Trusted_Connection=yes;', 'exec tempdb..sp_columns ''#ItemsTable''')
SELECT COLUMN_NAME FROM #Columns
DROP TABLE #Columns
ДРУГОЕ ОБНОВЛЕНИЕ:
ЕслиВы хотите получить список столбцов для таблицы в базе данных, вы можете использовать этот запрос:
SELECT [name] FROM sys.columns WHERE object_id = (SELECT object_id FROM sys.tables WHERE [name] = 'TableName')
Однако!Если вы собираетесь выполнять этот запрос и создавать таблицы разного размера много раз в день, я бы посоветовал вам придерживаться временных таблиц.Таким образом, вы не будете без необходимости писать в базу данных (кроме tempdb).Если по какой-то причине вам НУЖНЫ постоянные таблицы, создаваемые каждый раз, тогда, я думаю, это тоже хорошо!