2009年06月16日 09時54分41秒
1> create table t1 ( 2> a char(8000) 3> ,b char(61) 4> ); 5> go メッセージ 1701、レベル 16、状態 1、サーバー GUNTRA、行 1 7 バイトの内部オーバーヘッドを含めて、最小行サイズが 8068 になるので、テーブル 't1' を作成または変更できませんでした。こ のサイズは、テーブル行の最大許容サイズの 8060 バイトを超えています。 1> create table t1 ( 2> a char(8000) 3> ,b char(60) 4> ); 5> go メッセージ 1701、レベル 16、状態 1、サーバー GUNTRA、行 1 7 バイトの内部オーバーヘッドを含めて、最小行サイズが 8067 になるので、テーブル 't1' を作成または変更できませんでした。こ のサイズは、テーブル行の最大許容サイズの 8060 バイトを超えています。 1> create table t1 ( 2> a char(8000) 3> ,b char(54) 4> ); 5> go メッセージ 1701、レベル 16、状態 1、サーバー GUNTRA、行 1 7 バイトの内部オーバーヘッドを含めて、最小行サイズが 8061 になるので、テーブル 't1' を作成または変更できませんでした。こ のサイズは、テーブル行の最大許容サイズの 8060 バイトを超えています。 1> create table t1 ( 2> a char(8000) 3> ,b char(53) 4> ); 5> go 1> drop table t1; 2> go 1>
1レコードは 8060バイト 8053バイトらしい。
1> create table t2 ( 2> a varchar(8000) 3> ,b varchar(61) 4> ); 5> go 1> insert into t2 values(space(8000), space(61)); 2> go (1 行処理されました) 1>
でもVARCHAR型で定義するなら大丈夫。きっちりレコードのINSERTもできたっぽい。
1> create table t3 ( 2> a varchar(8000) 3> ,b varchar(8000) 4> ,c varchar(8000) 5> ); 6> go 1> insert into t3 values(space(8000), space(8000), space(8000)); 2> go (1 行処理されました) 1>
合計で 8000×3=24000バイトなのですが、あらら、INSERT出来たみたいです。 でも、項目の最大長は8000バイトですので、24000バイトの指定はエラーになります。
1> create table t4 ( 2> a varchar(24000) 3> ); 4> go メッセージ 131、レベル 15、状態 2、サーバー GUNTRA、行 2 列 'a' に指定したサイズ (24000) は、どのデータ型の許容最大サイズ (8000) も超えています。 1> create table t4 ( 2> a varchar(max) 3> ); 4> go 1> insert into t4 values(space(48000)); 2> go (1 行処理されました) 1>
しかし、長さ指定で “max” を使うと、その指定をした項目は2GBまで扱えます。