2009-08-31 15 views
25

これは機能しません。これどうやってするの?構文へ主キーとしてSQL IDを作成しますか?

+7

将来的には、「これはうまくいかない」と言うとき、あなたが意味することを説明することを検討してください。それは静かに何らかの形で失敗するのだろうか?あなたはエラーを受け取りますか?その場合、エラーは何ですか?あなたのコンピュータは自発的に燃焼しますか?テーブルを作成したり、テーブルに行を挿入したりすると失敗しますか? –

答えて

55

簡単な変更が必要とされているすべてです:

create table ImagenesUsuario (
    idImagen int not null identity(1,1) primary key 
) 

明示的に「制約」キーワードを使用することで、主キー制約に特定の名前を与えるのではなく自動割り当てにSQL Serverの依存することができます名前:それは、テーブルの使用特定idImagenおよびクラスタリングの利点を上回る書き込みの量を検索する(すなわち、バランスに基づいて、最も理にかなっている場合

create table ImagenesUsuario (
    idImagen int not null identity(1,1) constraint pk_ImagenesUsario primary key 
) 

は、「クラスタ」のキーワードを追加します他のインデックスによってテーブル)。

8

これは私たちがチームで生成するスクリプトと似ています。最初にテーブルを作成し、pk/fkなどの制約を適用します。

CREATE TABLE [dbo].[ImagenesUsuario] (
    [idImagen] [int] IDENTITY (1, 1) NOT NULL 
) 

ALTER TABLE [dbo].[ImagenesUsuario] ADD 
    CONSTRAINT [PK_ImagenesUsuario] PRIMARY KEY CLUSTERED 
    (
     [idImagen] 
    ) ON [PRIMARY] 
+2

create table文で主キーの作成を避ける理由はありますか? –

+3

私は当初、Enterprise Managerのようなツールで作成されたスクリプトを模倣していたと仮定しています。これは、(列のプロパティではなく)主キーの制約を作成していることを伝えます。また、制約の名前を付けることもできます。結局のところ、両方の方法が機能するので、どちらの方が読みやすく/保守しやすいのかは好みの問題だと思います。 – Mayo

1

あなたがT-SQLを使用している場合は、あなたのコードが間違って唯一のことは、あなたがかっこ{}代わりに括弧()を使用したことです。

PS:IDENTITYPRIMARY KEYNOT NULLを意味しますので、省略することもできます。

関連する問題