SQL Server可以处理的查询长度是否有限制?
我有一个普通的SqlCommand对象,并将一个非常长的select语句作为字符串传递.
在针对SQL Server 2005/2008引擎运行时,查询似乎没有问题,但是不针对SQL Server 2000引擎执行.
我没有任何错误细节,因为我只有第三手资料,但我的应用程序没有按预期工作.我可能会遇到安装SQL Server 2000实例的麻烦,但我只是想知道是否有人快速.是的,SQL Server 2000中有4K或8K限制,但2005年没有类型答案.
我知道我可以使用存储过程,但我们假设我有正当理由不使用它们:-)
对于adhoc查询,SqlServer 2000具有4000个字符的查询限制.
你能把它抽象成一个存储过程吗?
这是一个想法:
SQLServer 2000的VARCHAR最多允许8000个字符,因此这可能有效:
伪代码:
SQLCommand command = new SqlCommand("exec sp_executeSQL @CMD"); command.Parameters.Add(new SqlParameter("@CMD",YourDynamicSQL, VARCHAR);
必须阅读动态查询... 动态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
如果你认为这太麻烦而不值得,你有我的理解.