中の技術日誌
 ホーム / 上へ

SQL:SQL Server 2005 MAXキーワード

2005/06/11

この文書はSQL Server 2000 SP4, SQL Server 2005 CTP June/2005時点をベースに記述されています。

SQL Server 2005からはMAXキーワードが追加になります。このキーワードは今までサイズが制約されてきたnvarchar、役割自身が制約的なntextの中間に位置するような、広いデータを格納できるnvarcharデータだ。(nvarcharにはかぎらないが)

maxキーワードはCreate Tableのドキュメントを見ると

Applies only to the varchar, nvarchar, and varbinary data types for storing 2^31 bytes of character and binary data, and 2^30 bytes of Unicode data.

このように記述されており、3つの型で利用することができ、最大サイズは2^31バイトということがわかる。

河端さんが懸念されていたのは、maxなら、どんな大きなサイズが投入されてもいいのか?という話がありました。

LENのドキュメントを見ると

bigint if expression is of the varchar(max), nvarchar(max) or varbinary(max) data types; otherwise, int.

このように、通常はintだけど、maxの物の場合にはbigintで返しますよとのこと。

ということは、maxなものでもきちんとサイズが取れることは間違いない。

であればCHECKを使えば最大サイズの検出はできるはず。

CREATE TABLE [dbo].[TA](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [var] [nvarchar](max) COLLATE Japanese_CI_AS NULL,
 CONSTRAINT [PK_TA] PRIMARY KEY CLUSTERED
(
 [id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TA] WITH CHECK ADD  CONSTRAINT [CK_TA] CHECK ((LEN([var])<(10)))
GO

このようなテーブルを作成して、

INSERT INTO [ta]([var])
VALUES ('1234567890')

このようなinsertを流すと

メッセージ 547、レベル 16、状態 0、行 1
INSERT ステートメントは CHECK 制約 "CK_TA" と競合しています。
競合が発生したのは、データベース "test"、テーブル "TA", column 'var' です。

このようにきちんと制約がかかっていることが確認できる。どのようなデータを格納してもいいというのでなければ制約を掛けてしまうほうがいいだろう。


勉強会: 01/12 大阪#5, 02/03 東京#4 , 02/10 大阪#6 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告