Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将参数列表从Excel 2010传递到MS SQL 2012_Vba_Excel_Parameters_Sql Server 2012_Excel 2010 - Fatal编程技术网

Vba 将参数列表从Excel 2010传递到MS SQL 2012

Vba 将参数列表从Excel 2010传递到MS SQL 2012,vba,excel,parameters,sql-server-2012,excel-2010,Vba,Excel,Parameters,Sql Server 2012,Excel 2010,我正在创建一个.xlsm文件,其中包含一个带有三个输入参数的报告。输入参数后,最终用户运行一个宏,该宏将参数发送到存储过程,运行存储过程,并在Excel中显示数据 我让proc运行得很好,但是现在,对于三个参数中的两个(@AccountNumber和@ActiveAgreement),最终用户希望为每个参数输入多个值。以下是我当前的宏代码: Sub RefreshQuery() With ActiveWorkbook.Connections("ImpactDetailSheet").OLEDBC

我正在创建一个.xlsm文件,其中包含一个带有三个输入参数的报告。输入参数后,最终用户运行一个宏,该宏将参数发送到存储过程,运行存储过程,并在Excel中显示数据

我让proc运行得很好,但是现在,对于三个参数中的两个(@AccountNumber和@ActiveAgreement),最终用户希望为每个参数输入多个值。以下是我当前的宏代码:

Sub RefreshQuery()
With ActiveWorkbook.Connections("ImpactDetailSheet").OLEDBConnection
    .CommandText = "DECLARE @PriceList NVARCHAR(10), @AccountNumber NVARCHAR(10), @ActiveAgreement NVARCHAR(10) SET @PriceList = '" & Range("J1").Value & "' SET @AccountNumber = '" & Range("J2").Value & "' SET @ActiveAgreement = '" & Range("J3").Value & "' EXEC [dbo].[Impact] @PriceList, @AccountNumber, @ActiveAgreement"
End With
ActiveWorkbook.Connections("ImpactDetailSheet").Refresh
ActiveWorkbook.Connections("ImpactActiveAgreementSheet").Refresh
ActiveWorkbook.Connections("ImpactKickoutSheet").Refresh
End Sub
我的问题是如何修改代码以包含给定参数的多个值?据我所知,如果我使用的是列表,我需要更新存储过程以在参数(例如(@AccountNumber))周围使用括号

另外,是否可以有一个包含多个参数的单元格?例如,用逗号或类似符号分隔,而不是使用多个单元格作为附加参数


非常感谢。

听起来您想传递一个帐户号码和活动协议列表,该列表将在存储过程(SP)中使用

我认为有两种选择:要么为每个参数组合多次执行存储过程,要么更改SP以获取列表而不是单个值并处理该列表(如传递数组)

考虑到你给SP打电话的方式,我认为后者更合适

例如,如果将SP更改为接收@AccountNumber作为VARCHAR(最大值),则它可能会接收逗号分隔的字符串,例如100512341754等,该字符串可能存储在工作表的单元格中。然后可以在SP中拆分此字符串,并在查询中使用它


有关在SQL中拆分字符串的示例,请参阅此处推荐的SQL Server 2005的SplitInts函数:

此消息使我走上了正确的道路。我创建了一个函数来拆分字符串,并将结果修剪成一个新表,用于存储过程。非常感谢你帮我想清楚!