当前位置:  开发笔记 > 编程语言 > 正文

SqlCommand查询的长度有多少限制

如何解决《SqlCommand查询的长度有多少限制》经验,为你挑选了3个好方法。

SQL Server可以处理的查询长度是否有限制?

我有一个普通的SqlCommand对象,并将一个非常长的select语句作为字符串传递.

在针对SQL Server 2005/2008引擎运行时,查询似乎没有问题,但是不针对SQL Server 2000引擎执行.

我没有任何错误细节,因为我只有第三手资料,但我的应用程序没有按预期工作.我可能会遇到安装SQL Server 2000实例的麻烦,但我只是想知道是否有人快速.是的,SQL Server 2000中有4K或8K限制,但2005年没有类型答案.

我知道我可以使用存储过程,但我们假设我有正当理由不使用它们:-)



1> FlySwat..:

对于adhoc查询,SqlServer 2000具有4000个字符的查询限制.

你能把它抽象成一个存储过程吗?



2> FlySwat..:

这是一个想法:

SQLServer 2000的VARCHAR最多允许8000个字符,因此这可能有效:

伪代码:

SQLCommand command = new SqlCommand("exec sp_executeSQL @CMD");
command.Parameters.Add(new SqlParameter("@CMD",YourDynamicSQL, VARCHAR);



3> Alan Feather..:

必须阅读动态查询... 动态SQL的诅咒和祝福,我强烈建议你阅读它.这次可能对你没有帮助,但它在将来肯定对你有所帮助..

引用文章,以防万一.

SQL 2000中的sp_executesql和Long SQL字符串

SQL 2000和SQL 7上的sp_executesql存在限制,因为您不能使用长度超过4000个字符的SQL字符串.(在SQL 2005及更高版本中,您应该使用nvarchar(MAX)来避免此问题.)如果要在查询字符串超出此限制时使用sp_executesql以使用参数化查询计划,则实际上有一种解决方法.也就是说,您可以在EXEC()中包装sp_executesql:

DECLARE @ sql1 nvarchar(4000),@ sql2 nvarchar(4000),@ state char(2)SELECT @state ='CA'SELECT @ sql1 = N'SELECT COUNT(*)'SELECT @ sql2 = N'FROM dbo.authors WHERE state = @state'EXEC('EXEC sp_executesql N'''+ @ sql1 + @sql2 +''',N''@ state char(2)'',@ state ='''+ @state +'' '')

这是有效的,因为sp_executesql的@stmt参数是ntext,因此它本身没有任何大小限制.

您甚至可以使用INSERT-EXEC来使用输出参数,如下例所示:

CREATE TABLE #result(cnt int NOT NULL)DECLARE @sql1 nvarchar(4000),@ sql2 nvarchar(4000),@ state char(2),@ mycnt int SELECT @state ='CA'SELECT @ sql1 = N'SELECT @ cnt = COUNT(*)'SELECT @ sql2 = N'FROM dbo.authors WHERE state = @state'INSERT #result(cnt)EXEC('DECLARE @cnt int EXEC sp_executesql N'''+ @ sql1 + @sql2 +' '',N''@ state char(2),@ cnt int OUTPUT'',@ state ='''+ @state +''',@ cnt = @cnt OUTPUT SELECT @cnt')SELECT @mycnt = cnt来自#result

如果你认为这太麻烦而不值得,你有我的理解.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有