1

これはばかげているように見えるので、答えは「いいえ」だと思いますが、これが発生する必要があるまれな状況があります。

3つのフィールドを持つテーブルがあるとします。

ID, PK, smallint, not null
Code, Varchar(5), not null
Name, VarChar(50), not null

INSERTステートメントを使用してIDフィールドを魔法のようにCODEに挿入できますか?

INSERT INTO MyTable (Code, Name)
    VALUES (CAST([ID's new Value] AS VARCHAR(5)),'New Name')

注: テーブルの構造(またはデータベース)を変更すると、やり過ぎになります。ストアドプロシージャの最後に追加することで実現したいと思います。

4

3 に答える 3

1

ID があり、これを毎回行うわけではない場合 (トリガーが最も意味のある場合)、これを行うのは簡単ではありません。基本的には、Code フィールドに偽の値を挿入し (必須であるため)、挿入されたテーブルの id 値を出力し、ID でテーブルを更新します。もちろん (他の複数ステートメント アクションと同様に、try-catch と明示的なトランザクションを使用し、いずれかが失敗した場合はすべてのアクションをロールバックする必要があります)。

DECLARE @output TABLE (Id INT))
INSERT INTO MyTable (Code, Name) 
OUTPUT Inserted.ID INTO @output
    VALUES ('test','New Name') 

UPDATE m
SET code = o.Id
FROM    Mytable m
JOIN @output o ON m.Id = o.id
于 2012-09-04T22:11:51.160 に答える
1

これを実現する方法は、データベース トリガーを使用することです。トリガーは、insert ステートメントの結果として起動されるため、値がテーブルに挿入されます。その後、更新を実行できます。

少なくとも、それが Oracle でできることです。SQL-Server トリガーがどの程度の制御を提供するか、ID フィールドに値が与えられるタイミングはわかりませんが、ドキュメントは次のとおりです: http://msdn.microsoft.com/en-us/library/ms189799.aspx

于 2012-09-04T22:02:27.663 に答える
0

AFTER INSERT トリガーを使用して値をコピーすることを検討してください。

http://msdn.microsoft.com/en-us/library/aa258254(v=sql.80).aspx

于 2012-09-04T22:01:35.423 に答える