Vba 将参数列表从Excel 2010传递到MS SQL 2012
我正在创建一个.xlsm文件,其中包含一个带有三个输入参数的报告。输入参数后,最终用户运行一个宏,该宏将参数发送到存储过程,运行存储过程,并在Excel中显示数据 我让proc运行得很好,但是现在,对于三个参数中的两个(@AccountNumber和@ActiveAgreement),最终用户希望为每个参数输入多个值。以下是我当前的宏代码: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
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函数:此消息使我走上了正确的道路。我创建了一个函数来拆分字符串,并将结果修剪成一个新表,用于存储过程。非常感谢你帮我想清楚!