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

Limits for executing stored procedure with parameter through Excel ADO connection

我在 SQL 服务器上通过 Excel ADO 执行存储过程时遇到意外行为。存储过程有一个字符串参数。如果 sp 的参数很短——最多 4 百万个字符——一切正常。

字符串参数为 e.i 时出现问题。 9 百万个字符。 我确定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 可能并不重要,但以防万一它出现在 Whosebug 上的答案 中。当然,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,它立即向我展示了流氓。错误消息是 Run-time error '-2147217908 (80040e31)'。我想超时的默认值必须是 30 秒。通过 ADO 连接执行的查询超出了该时间,因为参数字符串长度超过了 900 万个字符。我只是将超时设置为 120 秒,问题就解决了。

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

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