我的包中定义了一个执行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
我已经尝试过阅读很多网站,但我仍然面临着这个问题。这是我的第二天,必须在明天早上之前解决它,所以任何帮助都会非常感激。
答案 0 :(得分:1)
您应该完全省略STEP2。 (但是,您的过程没有任何输出列。)
第1步,第3步也没问题。 (在STEP 3中,您可以在网格的“结果名称”列中使用userid
,但序数绝对会很好。)