2017-11-06 58 views
3

Excel ADO를 통해 SQL Server에서 저장 프로 시저를 실행하면 예기치 않은 동작이 발생합니다. 저장 프로 시저에는 문자열 매개 변수가 있습니다. sp의 매개 변수가 짧은 경우 - 최대 4 milion 문자까지 - 모든 것이 정상적으로 작동합니다.Excel ADO 연결을 통해 매개 변수가있는 저장 프로 시저를 실행하기위한 제한

문자열 매개 변수가 e.i 인 경우 문제가 발생합니다. 9 백만 자입니다. 내가 SP의 시작 부분에이 코드에 의해 매개 변수를 캡처로 확실히 ADO가 SQL 서버에 관통 할 수 없다고 판단했습니다 :

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

그러나, 매개 변수가 더 엑셀 ADO를 통해 호출되는 SP에서 처리 할 수 ​​없습니다. 상세한 sp는 중요하지 않을 수 있지만, 대답은 here에서 Stackoverflow에 제시된 경우에 대비됩니다.

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

및 쿼리 매개 변수의 크기에 대한 제한없이 제대로 실행 : 확실히, SP 자체는이 같은 SSMS에서 호출 할 수 있기 때문에 괜찮습니다.

Excel ADO와 같은 매개 변수 길이 제한, 쿼리 제한, 제한 시간을 통해 저장 프로 시저를 실행하는 데 제한이 있습니까?

+1

다른 기술을 사용하면 더 도움이 될 수 있지만 실제로 조사하려고 할 때/실제로하려는 작업을 지정하는 다른 질문을하십시오. 많은 ETL 도구가 있으며 Excel로 열어야하는지 또는 예정된로드를 사용할 수 있는지에 따라 달라집니다. 다른 대답이 많이 있습니다. 9 백만 문자는 SQL 서버에 전달할 수있는 크기가 매우 큰 매개 변수입니다. 또한 귀하의 다른 질문은 문자열 분할에 관한 것이고 이것은 STRING_SPILT() 함수가있는 SQL 2016 태그입니다. https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact- SQL – Matt

답변

0

알아 냈습니다. VBA 오류 트래핑에서 옵션 Break on all errors을 켰습니다. 오류 메시지는 Run-time error '-2147217908 (80040e31)'입니다. 시간 초과의 기본값은 30 초 여야합니다. 매개 변수 문자열 길이가 9 milion 문자를 전달하므로 ADO 연결을 통해 실행 된 쿼리는 그 시간을 초과합니다. 방금 시간을 120 초로 설정하고 문제가 해결되었습니다.

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

어쨌든 ADO 연결에 제한을 기본값으로 설정 한 경우에도 그 한계의 목록을 알고 여전히 가치가있을 것입니다.