我创建了一个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
答案 0 :(得分:1)
您需要将@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