从新插入的行更新具有范围标识的表

时间:2014-01-20 14:38:45

标签: sql-server sql-server-2008

我有一张表,我需要用ticketnumbers更新一列。 这些票证编号在另一个表中创建,它是一个标识字段。

此代码不起作用。为什么呢?

UPDATE sheet10
SET [TicketNummer] = (INSERT INTO ticketnummers (AangemaaktOp, aangemaaktdoor,verwijderd,afgewezen) VALUES ('2014-01-20 15:00:00',100,0,0) SELECT SCOPE_IDENTITY() )
where isnumeric([TicketNummer]) = 0

我做错了什么?

RG。 埃里克

2 个答案:

答案 0 :(得分:2)

如果UPDATE有行匹配,可组合DML应该允许你INSERT

...然而

  • 你如何关联行?
  • 并发插入会发生什么?
  • 如果多个行在sheet10中没有TicketNummer值,该怎么办
  • 和许多其他问题

总之,即使我从未真正按照设计问题这样做,可能

UPDATE
    sheet10
SET
    TicketNummer = (
    SELECT
        *
    FROM
        (
        INSERT INTO ticketnummers (AangemaaktOp, aangemaaktdoor,verwijderd,afgewezen)
        OUTPUT INSERTED.IDColumn
        VALUES ('2014-01-20 15:00:00', 100, 0, 0)
        ) X
)
WHERE
   ISNULL(TicketNummer, 0) = 0;

答案 1 :(得分:1)

您不能以这种方式使用INSERT。它必须自己声明。

基本上你必须分两步执行此操作:

INSERT INTO ticketnummers (AangemaaktOp, aangemaaktdoor,verwijderd,afgewezen) VALUES ('2014-01-20 15:00:00',100,0,0);

UPDATE sheet10
    SET [TicketNummer] = SCOPE_IDENTITY()
where ISNULL([TicketNummer], 0) = 0