繁体   English   中英

通过Excel ADO连接使用参数执行存储过程的限制

[英]Limits for executing stored procedure with parameter through Excel ADO connection

我通过Excel ADO遇到在SQL Server上执行存储过程的意外行为。 存储过程有一个字符串参数。 如果sp的参数很短 - 高达4个百万字符 - 一切正常。

当字符串参数为ei 9 milion字符时,问题开始。 我确定ADO可以穿透到SQL服务器,因为我在sp的开头用这个代码捕获参数:

create procedure MyStoredProcedure(@String nvarchar(max)) 
as 
if OBJECT_ID('dbo.temp', 'U') is not null drop table dbo.temp;
select [String]=@String into dbo.temp

但是,在通过Excel ADO调用的sp中无法进一步处理参数。 详细的sp可能不重要,但以防万一它在Stackoverflow上呈现在这里回答。 当然,sp本身还可以,因为我可以像这样从SSMS调用它:

declare @String nvarchar(max)
set @String=(select top 1 [String] from dbo.temp);
exec dbo.MyStoredProcedure @String

并且查询正确执行,不受参数大小的任何限制。

通过Excel ADO执行存储过程是否有任何限制 - 如参数长度限制,查询限制,时间限制?

弄清楚了。 我已经打开了VBA错误捕获中的Break on all errors选项Break on all errors ,它立刻向我展示了流氓。 错误消息是Run-time error '-2147217908 (80040e31)' 我想超时的默认值必须是30秒。 通过ADO连接执行的查询超出了该时间,因为参数字符串长度超过了9百万个字符。 我把时间设置为120秒,问题解决了。

Dim cmd As Object
Set cmd = CreateObject("ADODB.Command")  
    cmd.CommandTimeout = 120 'This line solved the problem

无论如何,了解ADO连接限制列表仍然很有价值,甚至是那些使用默认值设置的限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM