使用output& into子句将数据插入两个表

时间:2016-05-16 13:57:33

标签: sql sql-server

我想将一些临时数据移动到生产表并删除登台数据,并在可能的情况下同时插入生产表的历史数据。我想做类似下面的事情:

DELETE FROM _stagingTable
OUTPUT deleted.idTest, deleted.textTest
INTO _productionTable(idTest,textTest)
--Below is what im not sure
OUTPUT 'Add',deleted.idTest, deleted.textTest
INTO _productionTableHistory(typeTest, idTest, textTest)

是否可以多次使用输出子句?或者你建议我做什么?

提前致谢

2 个答案:

答案 0 :(得分:0)

答案是不,你不能直接做你想做的事。

如果您不想使用触发器解决方案并且您不希望基于主键的查询,那么我认为您需要临时表。

输出到#TempHoldTable,然后从#TempHoldTable插入到table1中,并从#TempHoldTable插入到table2中。

答案 1 :(得分:-1)

我认为这是个主意:

DELETE FROM _stagingTable
    OUTPUT deleted.idTest, deleted.textTest
    INTO _productionTable(idTest, textTest);

INSERT INTO _productionTableHistory(typeTest, idTest, textTest)
    SELECT 'Add', idTest, textTest
    FROM _productionTable pt;

这是两个单独的陈述。如果需要,您可以将它们包装到单个事务中。

如果您关注_productionTable中的数据,请在output子句中使用之前将其截断。鉴于它以下划线开头,我发现很难相信意图只是这个语句的临时位置,但我不知道正在使用的命名约定。