将变量从Access2010传递到存储过程

Passing a variable from Access2010 to stored procedure

我创建了一个 SSIS 包,运行来自以下存储过程:

DECLARE @SQLQuery ASVARCHAR(2000)
DECLARE @ServerName VARCHAR(200)
SET @ServerName ='myServerName'
SET @SQLQuery ='DTExec /F ^"\...\...\My_Package.dtsx^" '
EXEC master..xp_cmdshell @SQLQuery

然后我有一个带有几个按钮的 Access2010 应用程序,运行 3 个程序都以相同的方式设置 运行使用以下代码打包:

Dim conn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim sConnString As String

sConnString = "Provider=sqloledb; Server=MyServerName; Database=MyDB; Trusted_Connection=True; Integrated Security=SSPI;"

conn.Open sConnString

With cmd
  .ActiveConnection = conn
  .CommandType = adCmdText
  .CommandText = "EXEC my_sproc;"

现在我需要将文本框添加到触发用户输入文件名的过程的两个按钮。该按钮需要将该文件名传递给存储过程,然后存储过程需要在包中使用它。

非常感谢任何建议。这是我第一次做这样的事情,我有点迷茫。

谢谢, 斯科特

更新: 我改变了我的程序,它使用@FileName 程序中的临时值。我现在不确定如何从 Access 中获取值到 @FileName 变量中。

DECLARE @cmd VARCHAR(1000)
DECLARE @SSISPath VARCHAR(1000)
DECLARE @FilePath VARCHAR(1000)
DECLARE @FileName VARCHAR(1000)

SET @SSISPath = '\Server\...\...\...\...\Package.dtsx'
SET @FilePath = '\Server\...\...\...\'
SET @FileName = 'myImportFile.txt' --temp value - need to get value from Access form text box

SELECT @cmd = 'dtexec /f "' + @SSISPath + '"'
SELECT @cmd = @cmd + ' /SET \Package.Variables[User::FileName].Properties[Value];"' + @FilePath + @FileName + '"'

EXEC master..xp_cmdshell @cmd

您需要将 @FileName 作为输入参数...

ALTER PROCEDURE my_sproc 
    -- input parameter:
    @FileName VARCHAR(1000)
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @cmd VARCHAR(1000)
    DECLARE @SSISPath VARCHAR(1000)
    DECLARE @FilePath VARCHAR(1000)        

    SET @SSISPath = '\Server\...\...\...\...\Package.dtsx'
    -- and so on

...然后调用带有参数的存储过程,如下

With cmd
    .ActiveConnection = conn
    .CommandType = adCmdStoredProc
    .CommandText = "my_sproc"
    .Parameters.Append cmd.CreateParameter("@FileName", adVarChar, adParamInput, 1000, Me.SomeTextBox.Value)
    .Execute
End With