2012-03-01 68 views
2

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

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

STEP 1 - 我已经创建SQL任务

在常规选项卡中设置以下属性:

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 

当我调试我看到以下信息: 打破前执行:

User::DatabaseUserName = {Hi} 

打破后执行:(错误发生,但价值得到chanage)

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 

我曾尝试和阅读很多很多网站,但我依然面临着problem.This是我第二天就可以了,并有明天早上之前解决它,所以任何帮助将是非常赞赏。

回答

1

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

步骤1和步骤3都没问题。 (在STEP 3中,您可以在网格的结果名称列中使用userid,但序号绝对是好的。)

+0

非常感谢viktor。我们非常感谢您的帮助。 – 2012-03-01 14:15:08

相关问题