在我编写的一个测试用例中,字符串比较似乎在 SQL Server 和 .NET CLR 之间不以相同的方式工作。
这是C#代码:
这是C#代码:
string lesser = "SR2-A1-10-90";
string greater = "SR2-A1-100-10";
Debug.WriteLine(string.Compare("A","B"));
Debug.WriteLine(string.Compare(lesser, greater));
将输出:
-1
1
这段 SQL Server 代码:
declare @lesser varchar(20);
declare @greater varchar(20);
set @lesser = 'SR2-A1-10-90';
set @greater = 'SR2-A1-100-10';
IF @lesser < @greater
SELECT 'Less Than';
ELSE
SELECT 'Greater than';
将输出:
Less Than
为什么会有差异?
IF @lesser < @greater collate Latin1_General_CI_AS
,则返回greater than
。对于我来说,如果IF @lesser < @greater collate SQL_Latin1_General_CP1_CI_AS
,则返回less than
。 - Martin Smith