分享方式:


SET ANSI_PADDING (Transact-SQL)

適用於:Microsoft Fabric Microsoft網狀架構倉儲中的 SQL Server Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) SQL 分析端點

控制資料行針對數值長度短於資料行所定義大小的儲存方式,以及資料行針對 charvarcharbinaryvarbinary 資料尾端具有空白之數值的儲存方式。

注意

SET ANSI_PADDING OFFANSI_PADDING OFF 資料庫選項已被取代。 在 SQL Server 2017 (14.x) 和更新版本中,以及 Azure SQL 資料庫 和 Azure SQL 受控執行個體,ANSI_PADDING一律會設定為 ON。 已被取代的功能不應在新應用程式中使用。 如需詳細資訊,請參閱 SQL Server 2017 中已被取代的 資料庫引擎 功能。

Transact-SQL 語法慣例

Syntax

SQL Server 的語法、Azure Synapse Analytics 中的無伺服器 SQL 集區,Microsoft Fabric。

SET ANSI_PADDING { ON | OFF }

Azure Synapse Analytics 和分析平台系統 (PDW) 的語法。

SET ANSI_PADDING ON

注意

若要檢視 SQL Server 2014 (12.x) 和更早版本的 Transact-SQL 語法,請參閱舊版文件

備註

charvarcharbinaryvarbinary 資料類型定義的資料行具有定義的大小。

這項設定只會影響新資料行的定義。 建立好資料行之後,SQL Server 會根據建立資料行時的設定來儲存值。 現有數據行不會受到此設定的後續變更所影響。

注意

ANSI_PADDING 應該設定為 ON

下表顯示當值插入具有 char、varchar、binaryvarbinary 資料類型的數據SET ANSI_PADDING行時,設定的效果。

設定 char(n) NOT NULL 或 binary(n) NOT NULL char(n) NULL 或 binary(n) NULL varchar(n) 或 varbinary(n)
ON 將原始值填補到資料行的長度 (char 資料行使用尾端空格,binary 資料行使用尾端零)。 當 為 時ON,遵循與 char(nbinary(n NOT NULL 相同的規則。SET ANSI_PADDING 不會修剪插入 varchar 資料行的字元值尾端空白。 不會修剪插入 varbinary 數據行的二進位值尾端零。 值不會填補到資料行的長度。
OFF 將原始值填補到資料行的長度 (char 資料行使用尾端空格,binary 資料行使用尾端零)。 在 為 時OFFSET ANSI_PADDING,遵循與 varcharvarbinary 相同的規則。 修剪插入 varchar 資料行之字元值的尾端空格。 修剪插入 varbinary 資料行之二進位值的尾端零。

當填補時,char 資料行會填補空格,binary 資料行會填補零。 當修剪時,char 資料行會修剪尾端空格,binary 資料行會修剪尾端零。

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_PADDINGON 。 在連接之前,您可以在應用程式的 ODBC 資料來源、ODBC 連接屬性或 OLE DB 連接屬性集中設定這個項目。 的預設值 SET ANSI_PADDINGOFF DB-Library 應用程式的連線。

SET ANSI_PADDING設定不會影響 ncharnvarchar、ntexttextimagevarbinary(max)varchar(max)nvarchar(max) 數據類型。 它們一律會顯示 SET ANSI_PADDING ON 行為。 這表示不會修剪尾端空格和零。

當為 ONANSI_DEFAULTSANSI_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_PADDINGON 並測試。

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_PADDINGOFF 並測試。

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;