最佳实践:为“发送存储过程”;来自变量“的SQL命令”;在OLE DB源中?
在SSIS ETL中,我需要在不允许创建存储过程的服务器/db上运行一个查询 我通常使用变量中的存储过程作为OLE DB源的源: 但是,由于我们无法将存储过程放在此服务器上,我打算通过执行SQL语句,从主数据库检索文本,将存储过程的代码存储到变量中,然后使用存储在该变量中的文本作为源的SQL命令: 这样,我仍然可以远程更改SSIS OLE DB源对象最佳实践:为“发送存储过程”;来自变量“的SQL命令”;在OLE DB源中?,sql,sql-server,stored-procedures,ssis,Sql,Sql Server,Stored Procedures,Ssis,在SSIS ETL中,我需要在不允许创建存储过程的服务器/db上运行一个查询 我通常使用变量中的存储过程作为OLE DB源的源: 但是,由于我们无法将存储过程放在此服务器上,我打算通过执行SQL语句,从主数据库检索文本,将存储过程的代码存储到变量中,然后使用存储在该变量中的文本作为源的SQL命令: 这样,我仍然可以远程更改SSIS OLE DB源对象WHERE子句(只要我不更改SELECT部分) 我无法想象这是非常普遍的,所以我想得到一些意见-有没有更好的方法来做到这一点?我不想将此SP的所
WHERE
子句(只要我不更改SELECT
部分)
我无法想象这是非常普遍的,所以我想得到一些意见-有没有更好的方法来做到这一点?我不想将此SP的所有代码直接放入OLE DB源代码编辑器中,因为在出现
WHERE
子句更新的情况下,我们负担不起重新部署的费用。您已经完成了许多人不做的部分,并且正在使用变量来驱动包的执行。更正确的是,您不能完全交换列。我是学究,只要呈现相同的元数据,就可以完全更改查询
因此,这个问题变成了如何最好地实现允许包具有由外力驱动的查询过滤器。考虑到可维护性、易调试性等因素
我的直觉反应是3个变量
- QueryBase:String。硬编码<代码>从MyTable中选择*
- 查询:字符串。EvaluateExpression=True表达式:@[User::QueryBase]+@[User::QueryFilter]
- 查询过滤器:字符串
,其中Condition1不是NULL
,但在完全重新加载的情况下,它可能会变成一个空字符串
那么,更改QueryFilter值的选项是什么
dtexec/file p1.dtsx/set\Package.Variables[User::QueryFilter].Properties[Value];“WHERE Condition1不为NULL”
将其保存到.bat文件、不同的sql代理作业中。单击并运行,您就完成了可能是从主数据库加载相关查询的脚本数据源?虽然我不确定这是否真的更好。也许我们应该问问idkfa。你的麻烦会得到一张赞成票。。。以及您的推荐人;)感谢billinkc,我最初计划使用您描述的选项4。我们是2008 R2,所以我只能选择选项3(听起来不错)。