我有一个返回结果集的存储过程。之后,我将此结果集插入到创建的真实表中。然后我使用真正的表创建SSRS报告。
所以,像这样:
CREATE PROCEDURE Test
AS
DECLARE @TempTable TABLE(..)
INSERT INTO @TempTable
SELECT...
FROM ...
WHERE ...
SELECT * FROM @TempTable
--============================
INSERT INTO RealTable EXEC [dbo].[Test]
如何修改此存储过程,以便每次执行时都会使用现有数据截断表,然后插入一个新数据?
所以我需要这样的东西:
create procedure Test
as
TRUNCATE RealTable
DECLARE @TempTable TABLE(..)
INSERT INTO @TempTable
SELECT...
FROM...
WHERE...
SELECT * FROM @TempTable INTO RealTable
或者我应该只创建运行命令的代理作业:
Truncate Table RealTable
INSERT INTO RealTable EXEC [dbo].[Test]
我的逻辑方面是正确的吗?
答案 0 :(得分:0)
你可以做的另一件事: 1。 插入TargetTable 从SourceTable中选择* 2。 在TargetTable上重建索引 3。 exec sp_rename SourceTable,SourceTable_Old exec sp_rename TargetTable,SourceTable drop table SourceTable_Old
答案 1 :(得分:0)
不要TRUNCATE。使用MERGE语句。
CREATE PROCEDURE Test
AS
MERGE RealTable TRGT
USING SourceTable SRCE
ON SRCE.[Column] = TRGT.Column --use columns that can be joined together
WHEN MATCHED THEN UPDATE
SET TRGT.Column1 = SRCE.Column1,
TRGT.Column2 = SRCE.Column2
....................
WHEN NOT MATCHED BY TARGET THEN INSERT
VALUES
(
SRCE.Column1,
SRCE.Column2,
.....................
)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
答案 2 :(得分:0)
这是你可能需要的,因为你直接从@TempTable插入到RealTable。
create procedure Test
as
BEGIN
TRUNCATE TABLE RealTable
INSERT INTO RealTable
SELECT...
FROM someothertable
WHERE...
END