SQL任务 - 设置包变量

时间:2012-11-08 15:40:38

标签: ssis sql-server-2008-r2

我在包级别compdate声明了一个变量,并通过在包的控制流中删除Execute SQL Task来测试数据流到变量。

在任务中,

SQL语句:
select ? = (getdate() - 1)
参数映射:
  • 变量名称:User::compdate
  • 方向:Output
  • 数据类型:DATE
  • 参数名称:0
  • 参数大小:-1

为什么我会收到错误:

[Execute SQL Task] Error: Executing the query "declare @compdate date
set @compdate = (getdate() ..." failed with the following error: "Syntax error or access violation". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

2 个答案:

答案 0 :(得分:2)

我不明白为什么你需要执行一个SQL语句来获取前一天,因为这可以通过其他各种方式完成。

要回答您的问题,因为您尝试从执行SQL任务存储SQL查询的结果,您必须更改您提供的SQL语句。

您的新查询:

SELECT (GETDATE() - 1) AS DateVar

DateVar将是您需要映射到变量的单个参数。

您需要删除不需要的参数映射。打开结果集标签并添加新结果。将结果名称设置为DateVar,并将变量名称设置为变量User::compdate

然后,您需要设置执行SQL任务,以在常规标签中返回单行结果集,并将其映射到您的变量。为 ResultSet 选项选择单行

详细解释了使用结果集here。向下滚动到“使用单行结果集”部分,它有一个很好的示例,您可以遵循。

答案 1 :(得分:0)

如果您想在不使用result set的情况下使用。尝试以下步骤。

  1. 在各自的数据库中创建存储过程。以下 代码就是一个例子。

    CREATE proc GetYesterDay(@yesterday datetime output)
    as
    Select @yesterday=getdate()-1
    
  2. 创建ADO.NET连接以运行存储过程。其中,您可以提及参数输入和输出的方向。

  3. 创建执行任务并将其配置为以下屏幕截图。 enter image description here
  4. 单击参数映射并配置如下屏幕截图。 enter image description here
  5. 现在SSISCompletedDate变量将填充各自的数据。

    希望这有帮助!