1

私はプロジェクトに取り組んでいますが、疑問が生じました:挿入ステートメントは、それ自体の ID を別のフィールドに挿入できますか?

アイデアは、レコードの階層配置があり、「親」フィールドが親レコードの ID を指し、特定のツリーの「トップ」レコードがそれ自体を指すだけであるということです。

もちろん、親に対して null のままにすることも、後で戻ってその ID を挿入することもできます。しかし、レコードが挿入されているときに IDENTITY を別のフィールドに挿入する SQL Server 操作があったかどうか疑問に思っていましたか?

編集:または、フィールドのデフォルト値を別のフィールドの値に指定する方法はありますか? それはまた問題に対処するでしょう。

EDIT:別のフィールドであるデフォルトのフィールドはすでに回答されているようで、答えはノーです。トリガーを使用してください。もちろん、それは制約と非 null フィールドの問題には役に立ちません。( http://social.msdn.microsoft.com/Forums/en/sqltools/thread/661d3dc8-b053-47b9-be74-302ffa11bf76 )

4

2 に答える 2

0

ある程度はできます。Insert はOUTPUT句を許可し、OUTPUT は、現在挿入しているテーブルと同じテーブルである可能性があるテーブルにリダイレクトできます。次の例では、親ノードを挿入しますが、挿入中に新しく生成された ID に設定された parent_id を持つ子ノードも自動的に挿入します。

create table hierarchy (
    id int identity(1,1) not null primary key, 
    parent_id int null, 
    somefield varchar(100));


insert into hierarchy (parent_id, somefield)
    output inserted.id, 'child'
    into hierarchy (parent_id, somefield)
values (null, 'parent');    

select * from hierarchy;

最終的には実用的な用途は見られませんが、これはショーのハットトリックです。

于 2011-08-24T05:12:36.110 に答える
0

IDいいえ。明示的な値を挿入しない限り、この種の階層ではSET IDENTITY_INSERT ON、最初にトップレベルを挿入し、SCOPE_IDENTITYorOUTPUT句を使用して、挿入されたIDs を次のレベルダウンに使用する必要があります。

于 2011-08-23T23:12:31.480 に答える