3

INSERT自動生成された列を使用して、ステートメント中に別の列にデータを入力するにはどうすればよいですか?

簡単に言うと、データベース テーブルと関連する ASP ページを再利用して、当初の意図とはまったく異なるデータを表示しています。

次のような構造のテーブルがあります。その構造は私の手に負えません。

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

テーブルは転用されており、OrderNo列は使用していません。ただし、NON-NULLUNIQUEです。ダミーデータとして、行の列を入力したいと思いIDます。

これまでのところ、次のSQLがありますが、行の生成されIDた.

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

これはちょうど与えます:

メッセージ 207、レベル 16、状態 1、行 3
列名 'ID' が無効です。

4

2 に答える 2

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 に答える
0

1つのオプションは次のとおりです。

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;

そして、ここにFiddleがあります。

幸運を。

于 2013-02-11T03:02:09.040 に答える