読者です 読者をやめる 読者になる 読者になる

SSMS で CREATE のスクリプトを出力すると COLLATE(照合順序)の指定が消えてる

SQL Server Management Studio(SSMS) で テーブルの CREATE 文を出力した際に、列の COLLATE(照合順序) が落ちるとどっかで見たので試してみました。
まずテーブルを作成します。

create table [Table1] (
  [Id] int not null primary key, 
  [NameEn] varchar(10) collate Latin1_General_BIN2, 
  [NameJp] varchar(10) collate Japanese_BIN2 
)

SSMSなので、GUI でもOKです。列のプロパティの下の方に、照合順序を設定出来る項目があります。


テーブルが出来たら、CREATE 文を出力してみましょう。
オブジェクト エクスプローラー から対象のテーブルを右クリック => テーブルをスクリプト化 => CREATE => 新しいクエリ エディター ウィンドウ で出力します。

USE [テスト]
GO
/****** Object:  Table [dbo].[Table1]    Script Date: 2013/10/18 10:30:02 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Table1](
	[Id] [int] NOT NULL,
	[NameEn] [varchar](10) NULL,
	[NameJp] [varchar](10) NULL,
PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

するとこんなスクリプトが出力されています。見事に COLLATE の指定が落ちていますね。
では、COLLATE も含めた正しい CREATE 文を出力することは出来ないの?となりますが、ちゃんと出力する方法は用意されています。
オブジェクト エクスプローラー から対象のテーブルを含むデータベースを右クリック => タスク => スクリプトの生成 をクリックします。

オブジェクトの選択で、テーブルから対象のテーブルを選択します。

次へを押して、スクリプト作成オプションの設定で、詳細設定をクリックします

オプション - 全般 - スクリプトの照合順序 の項目 が False になっていますので、True に変更し OK をクリックします。

スクリプト作成オプションの設定に戻るので、出力場所を選択 新しいクエリ ウィンドウに保存 にし、次へをクリックしていくと出来上がりです。
生成されたスクリプトはこちら

USE [テスト]
GO
/****** Object:  Table [dbo].[Table1]    Script Date: 2013/10/18 10:43:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Table1](
	[Id] [int] NOT NULL,
	[NameEn] [varchar](10) COLLATE Latin1_General_BIN2 NULL,
	[NameJp] [varchar](10) COLLATE Japanese_BIN2 NULL,
PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO

若干面倒ですね!


2013/12/08 追記:SSMS 2012/2014 で確認しましたが、ツール => SQL Server オブジェクト エクスプローラー => スクリプト に、「照合順序を含める」というオプションがありました!
これなら、タスクから生成しなくても照合順序を含めることが出来ます。気付かなかった~!