我在包级别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.
答案 0 :(得分:2)
我不明白为什么你需要执行一个SQL语句来获取前一天,因为这可以通过其他各种方式完成。
要回答您的问题,因为您尝试从执行SQL任务存储SQL查询的结果,您必须更改您提供的SQL语句。
您的新查询:
SELECT (GETDATE() - 1) AS DateVar
DateVar
将是您需要映射到变量的单个参数。
您需要删除不需要的参数映射。打开结果集标签并添加新结果。将结果名称设置为DateVar
,并将变量名称设置为变量User::compdate
然后,您需要设置执行SQL任务,以在常规标签中返回单行结果集,并将其映射到您的变量。为 ResultSet 选项选择单行。
详细解释了使用结果集here。向下滚动到“使用单行结果集”部分,它有一个很好的示例,您可以遵循。
答案 1 :(得分:0)
如果您想在不使用result set
的情况下使用。尝试以下步骤。
在各自的数据库中创建存储过程。以下 代码就是一个例子。
CREATE proc GetYesterDay(@yesterday datetime output)
as
Select @yesterday=getdate()-1
创建ADO.NET连接以运行存储过程。其中,您可以提及参数输入和输出的方向。
现在SSISCompletedDate变量将填充各自的数据。
希望这有帮助!