当我使用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 ?
我有一些更复杂的查询,后面的方法会影响可读性。
答案 0 :(得分:2)
OLE DB Source的MDSN文档的“使用参数化SQL语句”部分声明参数化查询“可以是SELECT或EXEC语句”。没有迹象表明SET语句可以按您正在尝试的方式进行参数化。
明显的解决方法是将复杂的查询放在存储过程中。 (并且,坦率地说,如果查询 复杂,代码的未来维护者将很高兴复杂性存储在存储过程中,而不是埋没在SSIS提供的糟糕代码编辑器中。)< / p>
答案 1 :(得分:0)
你不能分配'?'到SQL Server中的datetime变量。为变量分配一些有效(日期时间)值,然后您可以在SQL Server任务中使用您的查询。