39

SQL のテーブルが存在するかどうかを確認する必要があります。

そうでない場合は、自動的に作成する必要があります。

今、私はこのコードを調査して見つけました:

IF  NOT EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[YourTable]') AND type in (N'U'))

BEGIN
CREATE TABLE [dbo].[YourTable](
....
....
....
) 

END

なぜobject_id = OBJECT_IDその場所に何を入れるべきかを説明できる人はいますか?

4

4 に答える 4

89

私はこの構文が好きです:

if(object_id(N'[dbo].[YourTable]', 'U') is not null)
...

object_id は、2 番目のパラメーターとして 2 char 型のオブジェクトを受け取ります。sys.objects のドキュメントで、以下にリストされているオブジェクト タイプのリストを見つけることができます。

  • AF = 集計関数 (CLR)
  • C = CHECK 制約
  • D = DEFAULT (制約またはスタンドアロン)
  • F = FOREIGN KEY 制約
  • FN = SQL スカラー関数
  • FS = アセンブリ (CLR) スカラー関数
  • FT = アセンブリ (CLR) テーブル値関数
  • IF = SQL インライン テーブル値関数
  • IT = 内部テーブル
  • P = SQL ストアド プロシージャ
  • PC = アセンブリ (CLR) ストアド プロシージャ
  • PG=プランガイド
  • PK = PRIMARY KEY 制約
  • R = ルール (古いスタイル、スタンドアロン)
  • RF = レプリケーション フィルター手順
  • S = システム基本テーブル
  • SN = シノニム
  • SO = シーケンス オブジェクト
  • SQ = サービス キュー
  • TA = アセンブリ (CLR) DML トリガー
  • TF = SQL テーブル値関数
  • TR = SQL DML トリガー
  • TT = テーブルタイプ
  • U = テーブル (ユーザー定義)
  • UQ = UNIQUE 制約
  • V = ビュー
  • X = 拡張ストアド プロシージャ
于 2013-12-09T19:41:05.620 に答える
1

OBJECT_ID()オブジェクトIDを返す関数です。ドキュメントを参照してください。

スキーマ スコープ オブジェクトのデータベース オブジェクト識別番号を返します。

http://msdn.microsoft.com/en-us/library/ms190328.aspx


特定のパラメーター (テーブルの詳細など) を渡すと、ID が返されます。これをテーブル内の ID と比較して、sys.objects現在存在するかどうかを確認できます。

于 2013-07-09T11:18:30.273 に答える