如何在临时表中插入存储过程数据

时间:2019-07-11 05:56:24

标签: sql sql-server sql-server-2008

我有一个存储过程,我希望从中存储临时表中的数据。

是否有可能在表中获取数据,但是每次都应该删除并执行新数据

我尝试使用Openrowset(-Details-)中的Select *,但是不起作用

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 个答案:

答案 0 :(得分:2)

为了将存储过程的结果集插入表中(临时表也是如此),您需要先定义表结构,然后使用INSERT INTO ... EXEC语句调用该过程。 / p>

完整文档位于https://docs.microsoft.com/en-us/sql/t-sql/statements/insert-transact-sql?view=sql-server-2017,该文档也包含在结果集选项中,这些选项可对此进行更多控制。

但是,我建议,考虑到过程的性质,您的模式设计要么有缺陷,要么有实现此解决方案的更好方法。例如,也许是分区视图。

答案 1 :(得分:0)

在这里您可以看到答案: How to insert stored procedure data in temp table

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

我希望这可以帮助您解决问题。