4

私はSQLServerにかなり慣れていません(1980年代後半にSQLを学びましたが、思い出すとDB2です)。今日は、データベース層をSQLに統合しています。まずSQLServerです。

そもそも。今日のように、プロジェクト内のほぼすべてのビジュアルオブジェクトとデータオブジェクトで行うのと同じように、実行時にすべてのデータベースオブジェクト、テーブルオブジェクト、およびインデックスをプログラムで生成します。つまり、私は非常に限られたビジュアルデザインツールを使用しています。

私のプロジェクトのすべての列には、データベースキーの場合と同じように、外部記述ファイル(すべてのユーザーがこれらのファイルを含むプロファイルを持っています)があり、ビジュアルオブジェクトの場合は、位置、長さ、画像マスク、フォントサイズなどの効果があります。 。つまり、動的フォーム。ほとんどすべてのウィンドウ、グリッド、フィルターは、ほとんどのデータベース接続と同じように実行時に作成されます。

私はこの環境でテーブルを作成するための小さなテスト「マシン」を構築し、プログラム内でテーブルを作成するのは非常に簡単でした(私はdelphiとADOを使用しています)

私が遭遇する問題は、列に「自動インクリメント」またはIdentitySQL Serverのフラグを立てる場合、または列を主キーとして記述する場合、SQL ServerManagementStudioによってインデックスまたはキーが自動的に作成されることです。

このインデックスまたはキーに付けられた名前を管理できれば問題ありません。

この状況の例:

    AdoCommand.CommandText := Str_SQL;
    TRY
      AdoCommand.Execute;
    FINALLY
      NotiFy_TimeOut ('Table was created', wait_for_one_sec);
    END;

Str_SQL私のデータベースエンジンは、上記の文字列に渡すこのSQLスクリプトを作成します。

    CREATE TABLE GENGITFL 
    (
      NR INT NOT NULL IDENTITY,
      GJM CHAR(3) NOT NULL,
      HEITI VARCHAR(25) NOT NULL,
      KAUPG REAL NULL,
      SOLUG REAL NULL,
      TOLLG REAL NULL,
      DUMMY VARCHAR(20) NULL,
    UNIQUE (GJM),
    PRIMARY KEY (GJM)
    )

SQL Serverは、次の2つのインデックスを自動的に作成します。

  • PK__GENGITFL__C51F17260A463F49
  • UQ__GENGITFL__C51F17277FA3E6E6

これらのファイルにこれらの名前を使用したくないので、次のような名前を使用します。

  • IDX_GENGITFL_GJM
  • IDX_GENGITFL_NR

私のイントロに照らして理由は明らかです。ランタイムエンジンはこれらの名前を自動的に作成できず、システムデータベース内で使用可能なインデックスファイルを探すオプションではないと思います。IDX_外部の説明でインデックスが必要だと言われている場合は、プレフィックス、テーブル名の横、フィールド名またはアンダースコアを挟んだ名前などIDX_GENGITFL_GJMを使用して、インデックスの名前を自動的に作成したいと思います。

誰かが私の貧弱な英語とプレゼンテーションを理解してくれることを願っています。私は英語でかなり錆びています。

ありがとう

編集:marc_sの助けを借りた後、私のSQL「スクリプト」は次のようになります。

    CREATE TABLE GENGITFL 
    (
      NR INT NOT NULL IDENTITY,
      GJM CHAR(3) NOT NULL,
      HEITI VARCHAR(25) NOT NULL,
      KAUPG REAL NULL,
      SOLUG REAL NULL,
      TOLLG REAL NULL,
      DUMMY VARCHAR(20) NULL,
    CONSTRAINT IDX_GENGITFL_NR UNIQUE (NR),
    CONSTRAINT IDX_GENGITFL_GJM PRIMARY KEY (GJM),
    )

    CREATE INDEX IDX_GENGITFL_HEITI ON GENGITFL (HEITI)

再度、感謝します。

4

1 に答える 1

11

システムのデフォルト名が必要ない場合は、独自の名前を指定してください。

 CREATE TABLE GENGITFL 
    (
      NR INT NOT NULL IDENTITY,
      GJM CHAR(3) NOT NULL,
      HEITI VARCHAR(25) NOT NULL,
      KAUPG REAL NULL,
      SOLUG REAL NULL,
      TOLLG REAL NULL,
      DUMMY VARCHAR(20) NULL,
    CONSTRAINT IDX_GENGITFL_NR UNIQUE (GJM),
    CONSTRAINT IDX_GENGITFL_GJM PRIMARY KEY (GJM)
    )

と?のCONSTRAINT (yourownnamehere)前にあるものを参照してくださいUNIQUEPRIMARY KEY

これで、定義したとおりに制約に名前が付けられます。

于 2012-12-01T09:46:55.260 に答える