2012-02-17 11 views
4

これはおそらく本当に愚かです。NVarChar変数の比較

DECLARE @A NVARCHAR = 'A'; 
DECLARE @AB NVARCHAR = 'AB'; 
if @A = @AB 
BEGIN 
PRINT N'A EQUALS AB'; 
END 

「AはABに等しい」あなたが私に理由を教えてもらえ...印刷されています。私はそのような何かをしようとした場合、私は実際にT-SQLでのNVARCHARの比較.. を理解していませんか?このpageを読む

は本当に...

感謝を助けていません。

+1

を、彼らは両方とも 'N'A''ていることを意味し、両方' NVARCHAR(1) 'だから。この悪い習慣をやめてください! http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –

答えて

7

長さが指定されていないnvarchar変数を宣言しているため、長さは1に設定されています。したがって、両方の変数には最初の文字の'A'しか含まれません。

代わりにこれを試してみてください:

DECLARE @A NVARCHAR(10) = 'A'; 
DECLARE @AB NVARCHAR(10) = 'AB'; 

if @A = @AB 
BEGIN 
PRINT N'A EQUALS AB'; 
END 
+2

私はそれがばかだと分かっていました。 – LB40

+0

@Joeと同意します。データ定義または変数宣言文でnが指定されていない場合、デフォルトの長さは1です.CASTおよびCONVERT関数を使用するときにnが指定されていない場合、デフォルトの長さは30です。 http://nilthakkar.blogspot.in/2012/01/specify-size-for-character-data-type.html) –

2
DECLARE @A NVARCHAR = 'A'; -- IS a NVARCHAR(1) containg 'A' 
DECLARE @AB NVARCHAR = 'AB'; -- IS also a NVARCHAR(1) containg 'A' 
DECLARE @AB2 NVARCHAR(2) = 'AB'; -- IS a NVARCHAR(2) containg 'AB' 

if @A = @AB 
BEGIN 
PRINT N'A EQUALS AB'; 
END 


if @A != @AB2 
BEGIN 
PRINT N'A NOT EQUALS AB'; 
END