SET ANSI_PADDING (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

列に定義されているサイズよりも短い値を列に格納する方法と、値の後に charvarcharbinaryvarbinary データ型で空白が続いている値を列に格納する方法を指定します。

Note

SET ANSI_PADDING OFF および ANSI_PADDING OFF データベース オプションは非推奨です。 SQL Server 2017 (14.x) 以降では、ANSI_PADDINGは常に ON に設定されます。 非推奨の機能を新しいアプリケーションで使用しないでください。 詳細については、「SQL Server 2017 の非推奨のデータベース エンジン機能」を参照してください

Transact-SQL 構文表記規則

構文

SQL Server、Azure Synapse Analytics のサーバーレス SQL プール、Microsoft Fabric の構文

SET ANSI_PADDING { ON | OFF }

Azure Synapse Analytics および Analytics Platform System (PDW) の構文

SET ANSI_PADDING ON

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

解説

charvarcharbinary、および varbinary データ型で定義された列は、定義されたサイズを持ちます。

この設定は新しい列の定義にだけ影響します。 列が作成された後は、 SQL Server では列の作成時の設定に基づいて値が格納されます。 この設定を後で変更しても、既存の列には影響がありません。

注意

ANSI_PADDING は常に ON になっている必要があります。

次の表は、charvarcharbinary、および 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 が切り捨てられます。

計算列やインデックス付きビューのインデックスを作成または変更するときには、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 設定は、ncharnvarcharntexttextimagevarbinary(max)varchar(max)、および nvarchar(max) データ型には影響しません。 これらの値では、常に SET ANSI_PADDING ON の動作が示されます。 つまり、末尾の空白と 0 は切り捨てられません。

ANSI_DEFAULTS が ON の場合は、ANSI_PADDING が有効になります。

ANSI_PADDING の設定は、解析時ではなく実行時に定義されます。

この設定の現在の設定を表示するには、次のクエリを実行します。

DECLARE @ANSI_PADDING VARCHAR(3) = 'OFF';  
IF ( (16 & @@OPTIONS) = 16 ) SET @ANSI_PADDING = 'ON';  
SELECT @ANSI_PADDING AS ANSI_PADDING;  

アクセス許可

ロール public のメンバーシップが必要です。

次の例では、この設定が各データ型にどのように影響するかを示しています。

ANSI_PADDING を ON に設定し、テストします。

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  

次に ANSI_PADDING を OFF に設定し、テストします。

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;