SET ANSI_PADDING (Transact-SQL)

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

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

Transact-SQL 語法慣例

Syntax

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

SET ANSI_PADDING { ON | OFF }

Azure Synapse Analytics 和 Analytics Platform System (PDW) 的語法

SET ANSI_PADDING ON

注意

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

備註

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

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

注意

ANSI_PADDING 應該一律設定為 ON。

下表顯示當值插入含 charvarcharbinaryvarbinary 等資料類型的資料行時,SET ANSI_PADDING 設定所造成的影響。

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

注意

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

當您要建立或變更計算資料行索引或索引檢視表時,ANSI_PADDING 必須是 ON。 如需使用索引檢視表和計算資料行索引時所需之 SET 選項設定的詳細資訊,請參閱 SET 陳述式 (Transact-SQL) 中的<使用 SET 陳述式時的考量>一節。

SET ANSI_PADDING 的預設值是 ON。 適用於 SQL Server 的 SQL Server Native Client ODBC 驅動程式和 SQL Server Native Client OLE DB 提供者在連線時,都會自動將 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 行為。 這表示不會修剪尾端空格和零。

當 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;  

另請參閱

SET 陳述式 (Transact-SQL)
SESSIONPROPERTY (Transact-SQL)
CREATE TABLE (Transact-SQL)
INSERT (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)