11

挿入時に、自動インクリメントされた主キーを追加する SqlServer にテーブルを作成したいと考えています。これは、MySql の auto_increment 機能と同様の自動インクリメント ID である必要があります。(下)

create table foo  
(  
user_id int not null auto_increment,  
name varchar(50)  
)  

挿入トリガーを作成せずにこれを行う方法はありますか?

4

8 に答える 8

21

このような

create table foo  
(  
user_id int not null identity,  
name varchar(50)  
)
于 2008-09-17T16:29:30.743 に答える
10

OPは自動インクリメントされた主キーを要求しました。IDENTITYキーワード自体は、列を主キーにしません。

CREATE TABLE user
(
  TheKey int IDENTITY(1,1) PRIMARY KEY,
  Name varchar(50)
)
于 2008-09-17T18:22:30.050 に答える
10

彼らはあなたの質問に答えましたが、ID 列を初めて使用する人にアドバイスを 1 つ追加したいと思います。関連テーブルに挿入できるように、挿入した ID の値を返す必要がある場合があります。多くのソースでは、@@identity を使用してこの値を取得するように指示されています。データの整合性を維持したい場合は、いかなる状況でも @@identity を使用しないでください。それらの1つが別のテーブルに挿入するために追加された場合、トリガーで作成されたIDを提供します。@@identity の値が常に正しいとは限らないため、@@identity を使用しないことをお勧めします。代わりに、scope_identity() を使用してこの値を取得してください。これが少し話題から外れていることは承知していますが、SQL Server で ID を使用する方法を理解するために重要です。そして、私を信頼してください。関連するレコードに誤った ID 値が与えられるという問題を修正したくありませんでした。これは、発見されるまでの数か月間、静かに問題が発生する可能性があり、その後データを修正することはほとんど不可能です.

于 2008-10-28T19:56:53.887 に答える
4

他の人が述べたように: IDENTITY 属性を列に追加し、それを主キーにします。

ただし、MSSQL の IDENTITY と MySQL の AUTO_INCREMENT には違いがあります。

  • MySQL では、AUTO_INCREMENT 列に対して一意の制約 (主キーの形式であることが多い) を定義する必要があります。
    MSSQL にはそのような要件はありません。
  • MySQL では、手動で AUTO_INCREMENT カラムに値を挿入できます。
    MSSQL では、値を IDENTITY 列に手動で挿入することはできません。必要に応じて、挿入の前に「SET IDENTITY_INSERT tablename ON」コマンドを発行して、これをオーバーライドできます。
  • MySQL では、AUTO_INCREMENT カラムの値を更新できます。
    MSSQL は、IDENTITY 列の値の更新を拒否します。
于 2008-09-17T19:18:45.047 に答える
2

フィールドをID フィールドとして設定するだけです。

于 2008-09-17T16:29:17.980 に答える
1

フィールドが ID であることを宣言する

于 2008-09-17T16:29:32.723 に答える
1

上記のアドバイスに従って、IDENTITY フィールドを使用してください。

CREATE TABLE foo
(
user_id int IDENTITY(1,1) NOT NULL,
name varchar(50)
)
于 2008-09-17T17:55:57.103 に答える
0

他の人が言ったように、Identity オプションを設定するだけです。

于 2008-09-17T17:52:17.597 に答える