Как вставить данные хранимой процедуры в временную таблицу - PullRequest
0 голосов
/ 11 июля 2019

У меня есть хранимая процедура, из которой я хочу данные во временной таблице.

Можно ли получить данные в таблице, но она должна отбрасываться и выполнять новые данные каждый раз

У меня естьпопытался использовать Select * из Openrowset (- Details-), но он не работает

Create PROCEDURE [dbo].[Auto Union Transaction]
AS
BEGIN 
DECLARE @DynamicTSQLStatement NVARCHAR(MAX);
SELECT @DynamicTSQLStatement = STUFF
(
    (
        SELECT N' UNION ALL SELECT * FROM ' + '[' + SCHEMA_NAME([schema_id]) + '].[' + [name] + ']'
        FROM [sys].[tables]
        WHERE [name] LIKE  'TRNS%9' or  [name] LIKE  'TRNS%20' 
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)')
    ,1
    ,10
    ,''
);
EXEC sp_executesql @DynamicTSQLStatement

END

Данные представляют собой одну таблицу

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Чтобы вставить результирующий набор хранимой процедуры в таблицу (то же самое относится и к временной таблице), вам необходимо сначала определить структуру таблицы, а затем вызвать процедуру, используя инструкцию INSERT INTO ... EXEC.

Полная документация по адресу https://docs.microsoft.com/en-us/sql/t-sql/statements/insert-transact-sql?view=sql-server-2017, которая также входит в параметры наборов результатов, которые обеспечивают больший контроль над этим.

Тем не менее, я бы предположил, что, учитывая характер вашей процедуры, вашдизайн схемы либо ошибочен, либо есть гораздо лучшие способы реализации этого решения;возможно разделенное представление, например.

0 голосов
/ 11 июля 2019

Здесь вы можете увидеть ответ: Как вставить данные хранимой процедуры в временную таблицу

Create PROCEDURE [dbo].[Auto Union Transaction]
AS
BEGIN 
DECLARE @DynamicTSQLStatement NVARCHAR(MAX);
SELECT @DynamicTSQLStatement = STUFF
(
    (
        SELECT N' UNION ALL SELECT * FROM ' + '[' + SCHEMA_NAME([schema_id]) + '].[' + [name] + ']'
        FROM [sys].[tables]
        WHERE [name] LIKE  'TRNS%9' or  [name] LIKE  'TRNS%20' 
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)')
    ,1
    ,10
    ,''
);
-- Create temporary table here

CREATE TABLE #tmpTable
(
   COL1 Nvarchar(Max),  -- Change Max to number you want
   COL2 INT,
   COL3 INT,
   COL4 Nvarchar(Max)
)

INSERT INTO #tmpTable
EXEC sp_executesql @DynamicTSQLStatement

END

Надеюсь, это поможет вам решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...