2

我已经在包级别声明了一个变量,并通过在包的控制流中 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.
4

2 回答 2

2

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

不过,要回答您的问题,由于您尝试存储执行 SQL 任务中的 SQL 查询结果,因此您必须更改您提供的 SQL 语句。

您的新查询:

SELECT (GETDATE() - 1) AS DateVar

您需要映射到变量的返回DateVar单个参数在哪里。

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

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

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

于 2012-11-08T16:05:01.437 回答
0

如果你想使用而不使用result set. 尝试以下步骤。

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

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

  3. 创建执行任务并将其配置为以下屏幕截图。 在此处输入图像描述
  4. 单击参数映射并按照以下屏幕截图进行配置。 在此处输入图像描述

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

希望这可以帮助!

于 2012-11-09T09:46:09.967 回答