我有一个存储过程,我希望从中存储临时表中的数据。
是否有可能在表中获取数据,但是每次都应该删除并执行新数据
我尝试使用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
数据是一张表
答案 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
我希望这可以帮助您解决问题。