0

当我使用 SQL 命令作为我在 SSIS 中的数据访问来执行 OLE DB 源时,如何将参数映射到本地 sql 变量?

我想要这样的事情:

DECLARE @BeginDate datetime
DECLARE @EndDate datetime

SET @BeginDate = ?
SET @EndDate = ?

SELECT * 
FROM Blah 
WHERE date BETWEEN @BeginDate  AND @EndDate

但我收到一条错误消息,提示“语法错误、权限违规或其他非特定错误”

代替

SELECT * 
FROM Blah 
WHERE date BETWEEN ? AND ?

我有一些更复杂的查询,并且采用后一种方法会破坏可读性。

4

2 回答 2

2

OLE DB 源的 MDSN 文档的“使用参数化 SQL 语句”部分指出参数化查询“可以是 SELECT 或 EXEC 语句”。没有迹象表明可以按照您尝试的方式对 SET 语句进行参数化。

显而易见的解决方法是将复杂的查询放在存储过程中。(而且,坦率地说,如果查询如此复杂,您的代码的未来维护者会很高兴复杂性在于存储过程中,而不是埋在 SSIS 提供的蹩脚的代码编辑器中。)

于 2013-09-14T22:39:43.953 回答
0

您不能分配“?” 到 SQL 服务器中的日期时间变量。为变量分配一些有效的(日期时间)值,然后您可以在 SQL Server 任务中使用您的查询。

于 2013-09-13T18:29:12.943 回答