使用“执行SQL任务对象”将值存储在变量中

时间:2012-03-01 05:21:01

标签: ssis

我的包中定义了一个执行sql任务,它将执行一个存储过程。执行存储过程时,它将返回用户凭据。我必须将凭证存储在变量中,然后在新的脚本任务中使用这些凭证。

以下是我到目前为止所尝试的内容。

第1步 - 我创建了SQL任务

在常规TAB上设置以下属性:

Resultset: Single row
connectionType: OLE DB
Connection:SourceDestination
SQLSourceType:DirectInput
SQLStatement: Execute dbo.GetLoginInfo1
ByPassPrepare = False

第2步 - 参数映射选项卡

Variable Name = User::DatabaseUserName
Direction = Output
Data Type = NVarchar
Parameter Name = @UserId
Parameter Size = 50

第3步 - 结果集标签

Result Name = 0
Variable Name = User::DatabaseUserName

当我执行任务时,我遇到了以下错误。

[Execute SQL Task] Error: Executing the query "EXECUTE [dbo].[GetUserLoginInfo1]"
failed with the following error: "Value does not fall within the expected range."
Possible failure reasons: Problems with the query, "ResultSet" property not set
correctly, parameters not set correctly, or connection not established correctly

当我调试时,我得看到以下信息: Break ON Pre执行:

User::DatabaseUserName = {Hi}

Break On Post Execute :(错误发生,但值得到了分支)

User::DatabaseUserName = {User1}

抱歉,忘了提及变量的创建。我创建了一个变量,如下所示。

Name = DatabaseUserName
Scope = Package1
Datatype = String
Value = Hi

下面提到的是我使用过的存储过程。

ALTER PROCEDURE [dbo].[GetUserLoginInfo1]
AS
BEGIN
    SELECT userid AS userid
    FROM login_credentials 
    WHERE servername= 'server1'
END

我已经尝试过阅读很多网站,但我仍然面临着这个问题。这是我的第二天,必须在明天早上之前解决它,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

您应该完全省略STEP2。 (但是,您的过程没有任何输出列。)

第1步,第3步也没问题。 (在STEP 3中,您可以在网格的“结果名称”列中使用userid,但序数绝对会很好。)