[英]ADO Command Parameter Not Passing to Stored Procedure or Stored Procedure 'Ignoring' Parameter
[英]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.