这可能真的很愚蠢。我真的不明白在T-SQL的NVarChar比较.. 如果我尝试类似的东西:NVarChar变量比较
DECLARE @A NVARCHAR = 'A';
DECLARE @AB NVARCHAR = 'AB';
if @A = @AB
BEGIN
PRINT N'A EQUALS AB';
END
“A等于AB”印......你能告诉我为什么吗?
阅读本page并不能真正帮助...
感谢。
这可能真的很愚蠢。我真的不明白在T-SQL的NVarChar比较.. 如果我尝试类似的东西:NVarChar变量比较
DECLARE @A NVARCHAR = 'A';
DECLARE @AB NVARCHAR = 'AB';
if @A = @AB
BEGIN
PRINT N'A EQUALS AB';
END
“A等于AB”印......你能告诉我为什么吗?
阅读本page并不能真正帮助...
感谢。
因为您声明的nvarchar变量没有指定长度,所以它们的默认长度为1.因此,这两个变量只包含第一个字符'A'
。因为他们都是'NVARCHAR(1)`这意味着他们都是`N'A'`
DECLARE @A NVARCHAR(10) = 'A';
DECLARE @AB NVARCHAR(10) = 'AB';
if @A = @AB
BEGIN
PRINT N'A EQUALS AB';
END
我知道这很愚蠢。 – LB40 2012-02-17 14:24:02
同意@Joe。当在数据定义或变量声明语句中未指定n时,缺省长度为1.当使用CAST和CONVERT函数时未指定n时,缺省长度为30.我最近在我的[blog]( http://nilthakkar.blogspot.in/2012/01/specify-size-for-character-data-type.html) – 2012-02-18 16:42:37
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
:
试试这个。请停止这种坏习惯! http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx – 2012-02-17 14:43:41