適用対象:SQL Server
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric のSQL 分析エンドポイント
Microsoft Fabric のウェアハウス
列に定義されているサイズよりも短い値を列に格納する方法と、値の後に char、 varchar、 binary、 varbinary データ型で空白が続いている値を列に格納する方法を指定します。
-
SET ANSI_PADDING ON
- 列に挿入されるときに、文字列値の末尾の空白が保持されます。 これは ANSI 準拠の動作です。 -
SET ANSI_PADDING OFF
- 列に挿入されるときに、文字列値の末尾の空白をトリミングします。 これは推奨されない動作です。
注
SET ANSI_PADDING OFF
、および ANSI_PADDING OFF
データベース オプションは非推奨です。 SQL Server 2017 (14.x) 以降のバージョンと、Azure SQL Database と Azure SQL Managed Instance では、 ANSI_PADDING
は常に ON
に設定されます。 非推奨の機能を新しいアプリケーションで使用しないでください。 詳細については、SQL Server 2017 のdeprecated データベース エンジン機能を参照してください。
構文
SQL Server の構文、Azure Synapse Analytics のサーバーレス SQL プール、Microsoft Fabric。
SET ANSI_PADDING { ON | OFF }
Azure Synapse Analytics および Analytics Platform System (PDW) の構文。
SET ANSI_PADDING ON
解説
char、varchar、binary、および varbinary データ型で定義された列は、定義されたサイズを持ちます。
この設定は新しい列の定義にだけ影響します。 列が作成された後は、 SQL Server では列の作成時の設定に基づいて値が格納されます。 既存の列は、この設定に対する後の変更の影響を受けられません。
注
ANSI_PADDING
は常に ON
に設定する必要があります。
次の表は、値が SET ANSI_PADDING
、varchar、binary、および varbinary データ型の列に挿入される場合の設定の効果を示しています。
設定 | char(n) NOT NULL または binary(n) NOT NULL | char(n) NULL または binary(n) NULL | varchar(n) または varbinary(n) |
---|---|---|---|
ON |
列の定義サイズになるように、char 型の列の場合は元の値の右側を空白で埋め、binary 型の列の場合は 0 で埋めます。 |
がされている場合、char(n)またはNOT NULL の場合と同じ規則に従います。 |
varchar 列に挿入された文字値の末尾の空白はトリミングされません。 varbinary 列に挿入されたバイナリ値の末尾のゼロはトリミングされません。 列の長さに合わせるためにパディングされることはありません。 |
OFF |
列の定義サイズになるように、char 型の列の場合は元の値の右側を空白で埋め、binary 型の列の場合は 0 で埋めます。 |
がされている場合SET ANSI_PADDING varbinary の場合と同じ規則に従います。 |
varchar 型の列に挿入された文字値の末尾にある空白は切り捨てられます。 varbinary 型の列に挿入されたバイナリ値の末尾にある 0 は切り捨てられます。 |
埋め込みが行われる場合、char 型の列は空白で埋められ、binary 型の列は 0 で埋められます。 切り捨てられる場合は、char 型の列では末尾の空白が切り捨てられ、binary 型の列では末尾の 0 が切り捨てられます。
計算列やインデックス付きビューでインデックスを作成または変更するとき、ANSI_PADDING
を ON
に設定する必要があります。 インデックス付きビューおよび計算列上のインデックスに必要な SET オプション設定の詳細については、「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 接続プロパティでも定義できます。
SET ANSI_PADDING
の既定値は、DB ライブラリ アプリケーションからの接続のOFF
です。
SET ANSI_PADDING
設定は、nchar、nvarchar、ntext、text、image、varbinary(max)、varchar(max)、および nvarchar(max) データ型には影響しません。 常に SET ANSI_PADDING ON
動作が表示されます。 つまり、末尾のスペースとゼロはトリミングされません。
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;