3

如何在INSERT语句期间使用自动生成的列填充另一列?

长话短说:我们正在重用一个数据库表和一个相关的 ASP 页面来显示与最初预期完全不同的数据。

我有一个类似于以下结构的表。它的结构是我无法控制的。

ID       int          NON-NULL, IDENTITY(1,1)
OrderNo  varchar(50)  NON-NULL, UNIQUE
More     ...

该表已被重新利用,我们没有使用该OrderNo列。然而,它是NON-NULLUNIQUE。作为虚拟数据,我想用行的ID列填充它。

到目前为止,我有以下 SQL,但无法弄清楚如何使用该行的 generated ID.

INSERT INTO MyTable (OrderNo, More)
OUTPUT INSERTED.ID
VALUES (CAST(ID AS varchar(50)))

这只是给出:

消息 207,级别 16,状态 1,第 3 行
无效的列名称“ID”。

4

2 回答 2

0

一种选择是:

create trigger YourTable_Trigger
on YourTable
INSTEAD OF INSERT
as begin

   INSERT INTO YourTable (OrderNo, AnotherField)
   SELECT 0, AnotherField FROM Inserted

   UPDATE YourTable SET OrderNo = SCOPE_IDENTITY() WHERE ID = SCOPE_IDENTITY()
end;

这是小提琴

祝你好运。

于 2013-02-11T03:02:09.040 回答
0

这是使用 OUTPUT 子句的解决方案。不幸的是,您无法在单个语句中完成此操作。

CREATE TABLE Orders (
   ID      int         not null identity(1,1),
   OrderNo varchar(50) not null unique
)

CREATE TABLE #NewIDs ( ID int )

INSERT Orders (OrderNo)
   OUTPUT INSERTED.ID INTO #NewIDs
SELECT 12345

UPDATE o
   SET o.OrderNo = i.ID
FROM Orders o
JOIN #NewIDs i
   ON i.ID = o.ID

SELECT * FROM Orders
于 2013-02-11T04:49:08.483 回答