2011-10-26 11 views
1

誰かがSQL ServerでデフォルトでANSIパディングを有効にするロジックが何であるかを私に説明することはできますか?私はあなたがそれをオフにすることができるということを気にしないでください:戻り以下の2つのコードスニペット真SQL ServerでANSIパディングがデフォルトで有効になっているのはなぜですか?

if len('  ') = len('') begin 
    print 'true' 
end 
else begin 
    print 'false' 
end 

if '  ' = '' begin 
    print 'true' 
end 
else begin 
    print 'false' 
end 

EDIT

。誰がそれがオンであるのか知っていますか?それはデータベース設計の決定ですか?それはデータベースの最適化ですか?これが使用されていることのポジティブな点は何ですか?確かに私には分かりません。私が見るのはネガティブです。

+0

まあ、それの名前から、ロジックは、標準に準拠するだろうか? ANSI =米国規格協会。 – derobert

+0

これは単なるデフォルト設定です。データベースごとに、または単一のバッチ/トランザクションで簡単に変更できます。大文字と小文字を区別しないデフォルトの照合と同じですが、一部の人々は貧しい選択だと主張します。 – Yuck

+3

'SET ANSI_PADDING OFF'は、将来のバージョンでは許可されなくなる[廃止された機能](http://msdn.microsoft.com/en-us/library/ms143729.aspx)です。 –

答えて

4

To be compliant with the ANSI/ISO SQL-92 specification

SQL ServerはANSI/ISO SQL-92仕様は以下のスペースで 文字列を比較する方法について(8.2節、 は、一般的には3#ルール)。 ANSI標準では、 文字の比較に使用される文字列のパディングが必要です。長さが一致するように比較してから、 を比較します。パディングは、WHERE およびHAVING句の述語およびその他のTransact-SQL文字列 の比較に直接影響します。たとえば、Transact-SQLでは、文字列 'abc'と 'abc'は、ほとんどの比較操作で同等と見なされます。

2

テスト動作:

SELECT SESSIONPROPERTY('ANSI_PADDING') AS [ANSI_PADDING] 

SET ANSI_PADDING ON 

IF '  ' = '' BEGIN 
    PRINT 'TRUE' 
END 
ELSE BEGIN 
    PRINT 'FALSE' 
END 

SET ANSI_PADDING OFF 

IF '  ' = '' BEGIN 
    PRINT 'TRUE' 
END 
ELSE BEGIN 
    PRINT 'FALSE' 
END 

SET ANSI_PADDING ON 

出力:

TRUE 
TRUE 
関連する問題