2012-11-08 104 views
2

我已经在包级别compdate上声明了一个变量,并且通过在包的控制流中删除Execute SQL Task来测试数据流。SQL任务 - 设置包变量

在任务,

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. 
+0

我很困惑,你的问题到底是什么? –

+0

参考编辑....忘了发布以下问题;) – GoldBishop

+0

您是否试图在您的变量中存储SQL查询的结果? –

回答

2

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

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

新的查询:

SELECT (GETDATE() - 1) AS DateVar

DateVar将是返回,你需要映射到您的变量参数。

您需要删除您的参数映射,因为它们不是必需的。打开结果集选项卡并添加一个新结果。设置结果名称DateVar,并设置变量名是你的变量User::compdate

然后,您需要设置您的执行SQL任务返回一个单列导致一般选项卡中设置,映射到你的变量。选择单行ResultSet选项。

使用结果集的详细说明here。向下滚动到'使用单排结果集'部分,它有一个很好的示例,您可以按照其中。

+0

我可以在不使用ResultSet的情况下执行此操作吗?尝试使用输出参数映射,但没有得到任何地方 – GoldBishop

+0

是否有一个特别的原因,你不想使用ResultSet? –

+0

尝试了这一点:http://www.julian-kuiters.id.au/article.php/ssis-execute-sql-task-output-parameters –

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

现在SSISCompletedDate变量将被填充相应的数据。

希望这会有所帮助!