SET ANSI_PADDING (Transact-SQL)
適用于: SQL Server Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 倉儲中的 SQL 分析端點
控制資料行針對數值長度短於資料行所定義大小的儲存方式,以及資料行針對 char、 varchar、 binary和 varbinary 資料尾端具有空白之數值的儲存方式。
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 語法,請參閱 舊版檔 。
備註
以 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) |
---|---|---|---|
開啟 | 將原始值填補到資料行的長度 (char 資料行使用尾端空格,binary 資料行使用尾端零)。 | 當 SET ANSI_PADDING 為 ON 時,請遵循 char(n) 或 binary(n) NOT NULL 的相同規則。 | 不修剪插入 varchar 資料行之字元值的尾端空格。 不修剪插入 varbinary 資料行之二進位值的尾端零。 值不會填補到資料行的長度。 |
OFF | 將原始值填補到資料行的長度 (char 資料行使用尾端空格,binary 資料行使用尾端零)。 | 當 SET ANSI_PADDING 是 OFF 時,請遵照 varchar 或 varbinary 的相同規則。 | 修剪插入 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 設定不會影響 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;
另請參閱
SET 陳述式 (Transact-SQL)
SESSIONPROPERTY (Transact-SQL)
CREATE TABLE (Transact-SQL)
INSERT (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)
意見反應
https://aka.ms/ContentUserFeedback。
即將推出:在 2024 年,我們將隨著內容的意見反應機制逐步淘汰 GitHub 問題,並以新的意見反應系統來取代。 如需詳細資訊,請參閱提交並檢視相關的意見反應