C# 从.NET调用SQL Server 2008中的存储过程时,结果排序不正确
我们有一个存储过程,它使用一个参数和一个CASE,以便按不同的列对结果进行排序。如果从SSMS执行存储过程,则无论使用哪个版本的SQL Server(2005或2008),记录都会根据参数进行排序。如果我们使用完全相同的参数值从应用程序调用它,则它只能使用SQL Server 2005正确地进行排序。我浏览了SQLDataReader,但它在2008年时得到的记录顺序错误 我也尝试了.NET2.0,以确保它与.NETFramework版本为4.0没有任何关系,我得到了相同的结果 我所知道的这些服务器之间的唯一区别,除了SQL Server版本之外,是使用SQL 2008的服务器是多处理器的C# 从.NET调用SQL Server 2008中的存储过程时,结果排序不正确,c#,.net,sql-server-2005,sql-server-2008,C#,.net,Sql Server 2005,Sql Server 2008,我们有一个存储过程,它使用一个参数和一个CASE,以便按不同的列对结果进行排序。如果从SSMS执行存储过程,则无论使用哪个版本的SQL Server(2005或2008),记录都会根据参数进行排序。如果我们使用完全相同的参数值从应用程序调用它,则它只能使用SQL Server 2005正确地进行排序。我浏览了SQLDataReader,但它在2008年时得到的记录顺序错误 我也尝试了.NET2.0,以确保它与.NETFramework版本为4.0没有任何关系,我得到了相同的结果 我所知道的这些服
这可能是什么原因?任何帮助都将不胜感激。我将在此冒险,假设您的
CASE
语句正在检查参数中的NULL
值。使用默认设置发送.NETNULL
值可能无法很好地处理SQLNULL
值
例如,如果您的参数是一个字符串,并且您正在使用集成的SQLDataProvider
,则有一个设置会自动将NULL
字符串替换为空白字符串。
我将通过让存储过程选择您的参数来验证您的.NET是否确实发送了您认为是的参数
事实上,如果是,取决于NULL
参数,我将在.NET中处理验证,然后不将参数发送到存储过程。这是一种非常简单的方法,可以确保参数实际上是NULL
当数据库是SQL Server 2005并在2008下运行时,我看到了这种奇怪的错误
确保兼容性级别与服务器版本匹配
一张1000字的图片:
在这种情况下,数据库不在建议的兼容级别
小心!!!一旦您更改了兼容性级别,您可能无法撤消它,因此请进行备份强>
小心!!!一旦您更改了兼容性级别,您可能无法撤消它,因此请进行备份强>
小心!!!一旦您更改了兼容性级别,您可能无法撤消它,因此请进行备份我们可以看到调用存储过程的.NET代码吗?这可能是问题所在。我们还能看到存储过程吗?它没有使用选择顶部。。。CTE中的ORDER BY…
是吗?如果我们能看到过程中的排序T-SQL以及调用SQL过程的.NET代码,那将非常有用。@Luis出于好奇,这有帮助吗?