SQL Server Integration Services(SSIS) - 用存储过程或表值函数替换选择语句

时间:2014-05-19 08:58:57

标签: sql sql-server stored-procedures ssis

我正在考虑用存储过程或表值函数替换select语句。

目前,数据源具有巨大的选择语句。我认为使用存储过程或表值函数可以带来以下好处:

  1. 易于维护&管理代码。
  2. 代码可以在团队(开发人员/测试人员/分析师)之间共享
  3. 性能可以从存储的执行计划中受益。
  4. 无需打开BIDS /数据工具即可维护包。
  5. 用存储过程或表值函数替换选择查询是一个好习惯吗?

    一般来说,使用CAST,ISNULL,CASE,REPLACE,COALESCE以及加入其他4个表时,SELECT查询长度超过100行

3 个答案:

答案 0 :(得分:1)

在OLEDB数据源中使用存储过程代替冗长的SELECT语句通常被认为是一种好习惯。还有其他一些缺点:

  1. OLEDB源中的SQL查询编辑器在解析查询时存在限制,如果查询过长或复杂且包含许多变量。
  2. 对变量数量的限制(特别是对大变量)。例如:使用2个变量正确解析200+行查询,但如果再引入一个变量 - 它将停止工作
  3. 我在某处有连接错误引用,但它们没有修复,并且使用存储过程或表值函数提供了解决方法。

    简而言之:**如果SELECT语句很大/很复杂/可变 - 使用存储过程**

    - 虽然这个问题本质上是有效的 - 通常在Stackoverflow社区中不鼓励这类开放式问题

答案 1 :(得分:0)

为什么还没有人提到VIEW呢?只需将select语句推送到数据库视图即可。然后,如果有变化,您不必打开包装,只需更改您的视图即可。

如果您需要某些程序逻辑,则仅使用存储过程或表值函数。

答案 2 :(得分:0)

当在SQL Server中执行任何SQL语句时,关系引擎首先查看过程高速缓存以验证是否存在同一SQL语句的现有执行计划。 SQL Server重用它找到的任何现有计划,节省了重新编译SQL语句的开销。如果不存在现有的执行计划,SQL Server将为查询生成新的执行计划。

使用存储过程可增加执行计划重用的可能性。