SET ANSI_PADDING (Transact-SQL)
char、varchar、binary、varbinary 型のデータにおいて、列の定義サイズより短い値や末尾に空白がある値を格納する方法を制御します。
重要 |
---|
今後のバージョンの MicrosoftSQL Server では、ANSI_PADDING が常に ON になり、このオプションを明示的に OFF に設定するすべてのアプリケーションでエラーが発生します。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 |
構文
SET ANSI_PADDING { ON | OFF }
説明
char、varchar、binary、varbinary のデータ型が定義された列には、定義されたサイズがあります。
この設定は新しい列の定義にだけ影響します。列が作成された後は、SQL Server では列の作成時の設定に基づいて値が格納されます。この設定を後で変更しても、既存の列には影響がありません。
注意 |
---|
ANSI_PADDING は常に ON に設定することをお勧めします。 |
次の表は、char、varchar、binary、varbinary 型の列に値を格納するときに、SET ANSI_PADDING の設定がどのように影響するかを示しています。
設定 |
char(n) NOT NULL または binary(n) NOT NULL |
char(n) NULL または binary(n) NULL |
varchar(n) または varbinary(n) |
---|---|---|---|
ON |
列の定義サイズになるように、char 型の列の場合は元の値の右側を空白で埋め、binary 型の列の場合は 0 で埋めます。 |
SET ANSI_PADDING が ON の場合は、char(n) または binary(n) NOT NULL の規則に従います。 |
varchar 型の列に挿入された文字値の末尾にある空白は切り捨てられません。varbinary 型の列に挿入されたバイナリ値の末尾にある 0 は切り捨てられません。列の定義サイズに合わせるために値が埋められることはありません。 |
OFF |
列の定義サイズになるように、char 型の列の場合は元の値の右側を空白で埋め、binary 型の列の場合は 0 で埋めます。 |
SET ANSI_PADDING が OFF の場合は、varchar または varbinary の規則に従います。 |
varchar 型の列に挿入された文字値の末尾にある空白は切り捨てられます。varbinary 型の列に挿入されたバイナリ値の末尾にある 0 は切り捨てられます。 |
注意 |
---|
埋められる場合は、char 型の列は空白で埋められ、binary 型の列は 0 で埋められます。切り捨てられる場合は、char 型の列では末尾の空白が切り捨てられ、binary 型の列では末尾の 0 が切り捨てられます。 |
計算列やインデックス付きビューのインデックスを作成または変更するときには、SET ANSI_PADDING を ON に設定する必要があります。インデックス付きビューおよび計算列上のインデックスに必要な SET オプション設定の詳細については、「SET (Transact-SQL)」の「SET ステートメントの使用に関する留意事項」を参照してください。
既定では、SET ANSI_PADDING は ON に設定されています。SQL Server Native Client ODBC ドライバおよび SQL Server Native Client OLE DB Provider for SQL Server では、接続時に自動的に ANSI_PADDING が ON に設定されます。この構成は、ODBC データ ソースまたは ODBC 接続属性で定義でき、接続前にアプリケーションで設定される OLE DB 接続プロパティでも定義できます。DB-Library アプリケーションからの接続に対しては、既定では SET ANSI_PADDING は OFF に設定されています。
SET ANSI_PADDING 設定は、nchar、nvarchar、ntext、text、image 型の値と、大きい値には影響しません。これらの値では、常に SET ANSI_PADDING ON の動作が示されます。つまり、末尾の空白と 0 は切り捨てられません。
SET ANSI_DEFAULTS が ON の場合は、SET ANSI_PADDING が有効になります。
SET ANSI_PADDING は、解析時ではなく実行時に設定されます。
ANSI_PADDING が OFF に設定されている場合は、文字型列に MIN、MAX、または TOP が含まれるクエリが SQL Server 2000 に比べて遅くなる可能性があります。
権限
public ロールのメンバシップが必要です。
例
次の例では、この設定が各データ型にどのように影響するかを示しています。
PRINT 'Testing with ANSI_PADDING ON'
SET ANSI_PADDING ON;
GO
CREATE TABLE t1 (
charcol CHAR(16) NULL,
varcharcol VARCHAR(16) NULL,
varbinarycol VARBINARY(8)
);
GO
INSERT INTO t1 VALUES ('No blanks', 'No blanks', 0x00ee);
INSERT INTO t1 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00);
SELECT 'CHAR' = '>' + charcol + '<', 'VARCHAR'='>' + varcharcol + '<',
varbinarycol
FROM t1;
GO
PRINT 'Testing with ANSI_PADDING OFF';
SET ANSI_PADDING OFF;
GO
CREATE TABLE t2 (
charcol CHAR(16) NULL,
varcharcol VARCHAR(16) NULL,
varbinarycol VARBINARY(8)
);
GO
INSERT INTO t2 VALUES ('No blanks', 'No blanks', 0x00ee);
INSERT INTO t2 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00);
SELECT 'CHAR' = '>' + charcol + '<', 'VARCHAR'='>' + varcharcol + '<',
varbinarycol
FROM t2;
GO
DROP TABLE t1
DROP TABLE t2