SET ANSI_PADDING (Transact-SQL)

控制資料行如何儲存比資料行的定義大小還短的值,以及如何儲存 charvarcharbinaryvarbinary 資料含有尾端空格的值。

ms187403.note(zh-tw,SQL.90).gif重要事項:
在 SQL Server 的未來版本中,ANSI_PADDING 一律是 ON,任何將此選項明確設定為 OFF 的應用程式都會產生錯誤。請避免在新的開發工作中使用此功能,並計劃修改目前使用此功能的應用程式。

主題連結圖示Transact-SQL 語法慣例

語法

SET ANSI_PADDING { ON | OFF }

備註

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

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

ms187403.note(zh-tw,SQL.90).gif附註:
我們建議您一律將 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)

ON

將原始值填補到資料行的長度 (char 資料行使用尾端空格,binary 資料行使用尾端的零)。

當 SET ANSI_PADDING 是 ON 時,遵照 char(n)binary(n) NOT NULL 的相同規則。

不修剪插入 varchar 資料行之字元值的尾端空格。不修剪插入 varbinary 資料行之二進位值的尾端零。不將值填滿資料行的長度。

OFF

將原始值填補到資料行的長度 (char 資料行使用尾端空格,binary 資料行使用尾端的零)。

當 SET ANSI_PADDING 是 OFF 時,遵照 varcharvarbinary 的相同規則。

修剪插入 varchar 資料行之字元值的尾端空格。修剪插入 varbinary 資料行之二進位值的尾端零。

ms187403.note(zh-tw,SQL.90).gif附註:
當填補時,char 資料行會填補空格,binary 資料行會填補零。當修剪時,char 資料行會修剪尾端空格,binary 資料行會修剪尾端零。

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

SET ANSI_PADDING 的預設值是 ON。SQL Server 的 SQL Native Client ODBC 驅動程式和 SQL Native Client OLE DB 提供者在連接之時,都會自動將 ANSI_PADDING 設為 ON。在連接之前,您可以在應用程式的 ODBC 資料來源、ODBC 連接屬性或 OLE DB 連接屬性集中設定這個項目。起始於 DB-Library 應用程式的連接之 SET ANSI_PADDING 預設值是 OFF。

SET ANSI_PADDING 設定不會影響 ncharnvarcharntexttextimage 和大數值。它們一律會顯示 SET ANSI_PADDING ON 行為。這表示不會修剪尾端空格和零。

當 SET ANSI_DEFAULTS 是 ON 時,會啟用 SET ANSI_PADDING。

SET ANSI_PADDING 的設定是在執行階段進行設定,而不是在剖析階段進行設定。

權限

需要 public 角色中的成員資格。

範例

下列範例顯示設定如何影響這些資料類型。

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

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)

其他資源

使用大數值資料類型

說明及資訊

取得 SQL Server 2005 協助