none
index作成スクリプト RRS feed

  • 質問

  • SQL2000だと全テーブルの主キーとINDEX作成スクリプトをSQL作成スクリプトで全テーブル指定をすれば出来たのですが、SQL2005だとCREATE TABLE文も付加されます。

    主キーとINDEXだけでのスクリプトはどうやって作ればよいでしょうか?

    2007年8月2日 8:06

回答

  • 後述のように、同じテーブルの SQL スクリプトを生成した時に Enterprise Manager では CREATE TABLE, ALTER TABLE, CREATE INDEX と3つの SQL ステートメントが生成される。一方、SSMS を使った場合は CREATE TABLE, CREATE INDEX の2つの SQL ステートメントが生成される。Enterprise Manager で SQL Server 2005 に接続することはできないので、それ以外の方法でステートメントを3つに分けて SQL スクリプトを生成してほしい。という意味ですか?

     

    それならば、SSMS を使ってそれを行うのは無理ですね。SSMS はオブジェクトの定義を見て SQL ステートメントを作っていますので。

     

    Scriptio という SQL スクリプト生成ツールがあります。このツールでも SSMS と同様2つのステートメントしか作成されませんが、ソースコードが公開されているのでこれを改造して希望される機能を実装してみてはいかがでしょうか。

     

    Scripting Objects in SQL Server 2005
    http://www.sqlteam.com/publish/scriptio/

     

    Scriptio Source Codes
    http://www.sqlteam.com/downloads/scriptio055.zip

     

    Enterprise Manager

    Code Snippet

    CREATE TABLE [dbo].[tbl1] (
     [key] [int] IDENTITY (1, 1) NOT NULL ,
     [data] [char] (10) COLLATE Japanese_CI_AS NULL
    ) ON [PRIMARY]
    GO

     

    ALTER TABLE [dbo].[tbl1] WITH NOCHECK ADD
     CONSTRAINT [PK_tbl1] PRIMARY KEY  CLUSTERED
     (
      [key]
     )  ON [PRIMARY]
    GO

     

     CREATE  INDEX [idx_data] ON [dbo].[tbl1]([data]) ON [PRIMARY]
    GO

     

     

     

    SSMS

    Code Snippet

    CREATE TABLE [dbo].[tbl1](
     [key] [int] IDENTITY(1,1) NOT NULL,
     [data] [char](10) NULL,
     CONSTRAINT [PK_tbl1] PRIMARY KEY CLUSTERED
    (
     [key] ASC
    ) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

     

    CREATE NONCLUSTERED INDEX [idx_data] ON [dbo].[tbl1]
    (
     [data] ASC
    ) ON [PRIMARY]
    GO

     

    2007年8月3日 7:44

すべての返信

  • SQL Server 2000 でテーブル作成スクリプトを作らずに主キーとインデックスだけを作成スクリプトを生成する方法、というのがわからないのですがどうやってやっているのですか?

     

    2007年8月2日 15:06
  • 以下のようにやっています。

    (1)テーブルを選択する。

    (2)SQLスクリプト生成を選ぶ

    (3)書式タグのチェックを全部外す

    (4)オプションタグのINDEXスクリプトと主キースクリプトをチェックする。

    (5)全般タグで全テーブルを選ぶ。

     

    2007年8月3日 4:03
  • 後述のように、同じテーブルの SQL スクリプトを生成した時に Enterprise Manager では CREATE TABLE, ALTER TABLE, CREATE INDEX と3つの SQL ステートメントが生成される。一方、SSMS を使った場合は CREATE TABLE, CREATE INDEX の2つの SQL ステートメントが生成される。Enterprise Manager で SQL Server 2005 に接続することはできないので、それ以外の方法でステートメントを3つに分けて SQL スクリプトを生成してほしい。という意味ですか?

     

    それならば、SSMS を使ってそれを行うのは無理ですね。SSMS はオブジェクトの定義を見て SQL ステートメントを作っていますので。

     

    Scriptio という SQL スクリプト生成ツールがあります。このツールでも SSMS と同様2つのステートメントしか作成されませんが、ソースコードが公開されているのでこれを改造して希望される機能を実装してみてはいかがでしょうか。

     

    Scripting Objects in SQL Server 2005
    http://www.sqlteam.com/publish/scriptio/

     

    Scriptio Source Codes
    http://www.sqlteam.com/downloads/scriptio055.zip

     

    Enterprise Manager

    Code Snippet

    CREATE TABLE [dbo].[tbl1] (
     [key] [int] IDENTITY (1, 1) NOT NULL ,
     [data] [char] (10) COLLATE Japanese_CI_AS NULL
    ) ON [PRIMARY]
    GO

     

    ALTER TABLE [dbo].[tbl1] WITH NOCHECK ADD
     CONSTRAINT [PK_tbl1] PRIMARY KEY  CLUSTERED
     (
      [key]
     )  ON [PRIMARY]
    GO

     

     CREATE  INDEX [idx_data] ON [dbo].[tbl1]([data]) ON [PRIMARY]
    GO

     

     

     

    SSMS

    Code Snippet

    CREATE TABLE [dbo].[tbl1](
     [key] [int] IDENTITY(1,1) NOT NULL,
     [data] [char](10) NULL,
     CONSTRAINT [PK_tbl1] PRIMARY KEY CLUSTERED
    (
     [key] ASC
    ) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

     

    CREATE NONCLUSTERED INDEX [idx_data] ON [dbo].[tbl1]
    (
     [data] ASC
    ) ON [PRIMARY]
    GO

     

    2007年8月3日 7:44