将参数从Excel传递到SQL

ALTER PROCEDURE [dbo].[SP_Hello] @portfolio nvarchar(5), @discount numeric(18,2), @lowerlimit numeric(18,2), @midlimit numeric(18,2) AS BEGIN SET NOCOUNT ON; SELECT distinct EntityDescription, d.AmountDueInCurr * @discount as [1st part], d.AmountDueInCurr * (1 - @discount) as [2nd Part], CASE WHEN d.AmountDueInCurr <= 0 THEN 'Solution 1' WHEN d.AmountDueInCurr between 0 and @lowerlimit THEN 'Solution 2' WHEN d.AmountDueInCurr between (@lowerlimit + 0.01) and @midlimit THEN CONCAT(@portfolio, '-01') WHEN d.AmountDueInCurr > (@midlimit+0.01) THEN CONCAT(@portfolio, '-02') ELSE 'Error' END AS Solution_type FROM T1 d 

我想从Excel中传递参数,使用VBA作为这一个:

 Private Sub CommandButton1_Click() Dim Portfolio As String Dim Discount As Single Dim lowerlimit As Single Dim midlimit As Single Portfolio = Sheets("Input").Range("B2").Value Popust = Sheets("Input").Range("B3").Value lowerlimit = Sheets("Input").Range("B4").Value midlimit = Sheets("Input").Range("B5").Value With ActiveWorkbook.Connections("Hello_data").OLEDBConnection .CommandText = "exec SP_Hello '" & Portfolio & "','" & Discount & "','" & lowerlimit & "','" & midlimit & "'" ActiveWorkbook.Connections("Hello_data").Refresh End With Worksheets(2).Activate End Sub 

似乎不pipe我做什么(格式化,声明或Dimvariables/参数),我总是得到Excel中的转换数据types错误。 我已经尝试了所有从string到双精度以及SQL中的所有数字组合,没有任何组合似乎工作。

如果我只传递数据库中的nvarchar组合参数(string),它会很好。 只要我将数字或date添加到组合中,就会出现转换错误。

您存储的proc参数定义了数字数据types,但是您的TSQLstring正在传递string。 您需要删除您在参数@discount@lowerlimit@midlimit周围放置的单引号。

要查看问题,只需添加以下代码:

 Dim tsql As String tsql = "exec SP_Hello '" & Portfolio & "','" & Discount & "','" & lowerlimit & "','" & midlimit & "'" 

打印tsql,并在SSMS中执行它。 你应该马上看到这个问题。