【发布时间】:2017-11-06 10:23:37
【问题描述】:
我遇到了通过 Excel ADO 在 SQL Server 上执行存储过程的意外行为。存储过程有一个字符串参数。如果 sp 的参数很短 - 最多 400 万个字符 - 一切正常。
当字符串参数为 e.i. 时问题开始。 900 万个字符。 我已经确定,当我在 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]=@String into dbo.temp
但是,在通过 Excel ADO 调用的 sp 中无法进一步处理参数。详细的 sp 可能并不重要,但以防万一它出现在 Stackoverflow 上的答案 here。当然,sp 本身是可以的,因为我可以像这样从 SSMS 调用它:
declare @String nvarchar(max)
set @String=(select top 1 [String] from dbo.temp);
exec dbo.MyStoredProcedure @String
并且查询正确执行,对参数大小没有任何限制。
通过 Excel ADO 执行存储过程是否有任何限制 - 例如参数长度限制、查询限制、时间限制?
【问题讨论】:
-
一种不同的技术可能会使您受益更多,但我会做一些研究/问另一个问题,以指定您实际尝试做什么。有很多 ETL 工具,这取决于它是否必须在 Excel 打开的情况下完成,或者您是否可以使用计划加载,或者......有很多不同的答案。 900 万个字符是传递给 SQL 服务器的一个非常大的参数。另外你的另一个问题是关于拆分字符串,这个问题被标记为 SQL 2016,它有一个 STRING_SPILT() 函数docs.microsoft.com/en-us/sql/t-sql/functions/…
标签: sql vba excel ado sql-server-2016