【问题标题】:Passing a Parameter List from Excel 2010 to MS SQL 2012将参数列表从 Excel 2010 传递到 MS SQL 2012
【发布时间】:2014-01-24 05:13:21
【问题描述】:

我正在创建一个 .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))。

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

非常感谢。

【问题讨论】:

    标签: vba excel parameters sql-server-2012 excel-2010


    【解决方案1】:

    听起来您想传递将在您的存储过程 (SP) 中使用的帐号和有效协议列表。

    我认为有两种选择:要么为每个参数组合多次执行 Stored Proc,要么将 SP 更改为获取列表而不是单个值并处理此列表(如传递数组)。

    鉴于您调用 SP 的方式,我认为后者会更合适。

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

    有关在 SQL 中拆分字符串的示例,请参阅此处推荐的 SQL Server 2005 的 SplitInts 函数:How to pass an array into a SQL Server stored procedure

    【讨论】:

    • 这条信息让我走上了正确的道路。我创建了一个函数来拆分字符串并将结果修剪到一个用于存储过程的新表中。非常感谢您帮我考虑清楚!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多