SSIS中的SQL变量更改

时间:2014-07-22 13:36:29

标签: sql sql-server ssis

我是SSIS的新手,请原谅我,如果这个问题很简单或已经得到回答。所以我有一个SQL查询,开头如下:

declare @start datetime, @end datetime, @startMonth datetime, @endMonth datetime, @maxHoursToRespond int
    ----Set These------------------------------------------------
    set @end='6/27/2014'
    set @maxHoursToRespond=24                       
    -------------------------------------------------------------
    set @start=dateadd(dd, -90, @end) -- set duplication period
    set @startMonth=dateadd(dd, -2, @end)-- set to start date of output you want
    set @endMonth=dateadd(dd, -1, @end) -- set to day of end date of output you want

当我把它放在带有SQL命令的OLE DB源编辑器中作为我的数据访问模式时, 所有变量都用问号代替。 它看起来像:

DECLARE ? datetime, ? datetime, ? datetime, ? datetime, ? int
/*--Set These------------------------------------------------*/ SET ? = ?
SET          ? = 24
/*-----------------------------------------------------------*/ SET ? = dateadd(dd, -     90, ?)
SET          ? = dateadd(dd, - 2, ?)
SET          ? = dateadd(dd, - 1, ?)

在查询构建器中。我想知道为什么会发生这种情况。我也想知道如何才能成功构建查询 (目前我得到的语法错误是“不支持声明SQL构造或语句。”)。 我是否必须在SSIS中创建这些变量(如@start)?

2 个答案:

答案 0 :(得分:1)

你可以:

  1. 将SQL封装在内部包含所有声明的存储过程中(假设变量值是静态的),然后使用EXEC调用执行SQL任务中的存储过程。 EXEC My_Stored_Procedure
  2. 编写一个接受变量作为输入的存储过程,将它们映射到SSIS中的变量,然后执行存储过程,如Exec My_Stored_Proc ?,?,?,?,用户变量映射到相应的存储过程变量。
  3. 保持查询不变,但删除DECLARE和SET,并将SSIS变量映射到查询。这很可能不会起作用,因为SSIS不知道哪个?对应哪个变量(它会尝试按照它们出现的顺序映射它们。
  4. 数字2是普遍接受的方法,除非您将变量值存储在表中或SP中可以访问的内容中,否则数字1可能更清晰。

答案 1 :(得分:1)

我已直接粘贴到SQL command text中的OLE DB Source Editor脚本,但没有任何变化。按Parse Quesry..我检查了SQL是否正确。当我尝试使用Build Query..时,它说,DECLARE不受支持。所以不要使用builder:)

enter image description here