簡體   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