2012-01-26 15 views

答えて

3

のインデックスは、テーブル変数の宣言の中に暗黙的に行うことができますすることができますどのように、私はそれにcolumnAを考えてみましょう固有の制約を作成します。プライマリキーはクラスタ化インデックスを表し、ユニーク制約は非クラスタ化インデックスを表します。

DECLARE @Users TABLE 
(
    UserID INT PRIMARY KEY, 
    UserName varchar(50), 
    UNIQUE (UserName) 
) 

詳細については、chech THISの記事を参照してください。

+0

ありがとうございました。 – DotNetUser

+0

テーブル変数に条件付き一意制約を設定できますか? – Mohammadreza

1
declare @YourTempTable table 
( 
    ID int not null primary key, 
    Name nvarchar(255) null 
) 
+0

ありがとう、あなたの答えは非常に有用だった – DotNetUser

1

カラム定義とともに指定できます。

declare @MyContacts table (columnA int unique nonclustered ...) 
+0

あなたの答えをありがとう、それは助けた。 – DotNetUser

5

あなたは、インデックスを必要とするのに十分な大きさのテーブルを持っている場合は、一時テーブルでそれを行う、テーブル変数にそれをしません!

表変数には、制限のすべての種類を持っている:

  • なし統計 - オプティマイザは常にそれらが
  • なし(制約の他に)単一の行
  • いいえ非クラスタ化インデックスがあることを前提と即時スコープ外の可視性 - サブプロセスはテーブル変数にアクセスできません。取引の範囲外
  • - それは、トランザクション・ログに記録されていないので、あなたがいない ROLLBACK何もテーブル変数に行わことができます

あなたは、インデックスを必要とする一時に入れるのに十分な大きさのものを持っている場合代わりにテーブル。

+1

+1ユニークな制約は、パフォーマンスのためではなくデータ保護のために役立ちますが、一般的に私は同意します。パフォーマンス上の理由からインデックスが必要な場合は、誤った種類の一時オブジェクトを選択した可能性があります。それは普遍的には当てはまりませんが、通常はそれがうまくいくからです。 –

+0

私はあなたの意見に同意しますが、私の場合はテーブル変数が必要でした。 – DotNetUser

+0

+1私たちは皆直接の質問に集中していました。あなたはボックスの外で考えて、代替手段として貴重な情報を与えました。 –

関連する問題