【问题标题】:SQL Server Integration Services (SSIS) - Replacing Select Statements with Stored Procedures or Table Valued FunctionsSQL Server Integration Services (SSIS) - 用存储过程或表值函数替换 Select 语句
【发布时间】:2014-05-19 08:58:56
【问题描述】:

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

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

  1. 易于维护和管理代码。
  2. 可以在团队(开发人员/测试人员/分析人员)之间共享代码
  3. 性能可以从存储的执行计划中受益。
  4. 无需打开 BIDS/数据工具即可维护包。

什么时候最好用存储过程或表值函数替换 select 查询?

一般来说,使用 CAST、ISNULL、CASE、REPLACE、COALESCE 和连接其他 4 个表的 SELECT 查询有 100 多行

【问题讨论】:

  • 一开始为什么要使用大量的 select 语句作为数据源?这是在SSIS中无法实现的吗?你能分享一个例子吗?
  • 在 SSIS 中使用各种连接、订单、查找等表示时,巨大的 select 语句甚至更大。
  • @godzilla2014 - 我猜SSIS可以达到要求;但是,我更喜欢纯粹在 T-SQL 中进行任何数据转换、数据操作、派生列,并使用 SSIS 将数据从 A 移动到 B。

标签: sql sql-server stored-procedures ssis


【解决方案1】:

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

  1. OLEDB 源代码中的 SQL 查询编辑器在查询过长或包含许多变量时解析查询时会受到限制。
  2. 变量数量限制(特别是大变量)。例如:一个 200 多行的查询可以用 2 个变量正确解析,但如果再引入一个变量,它就会停止工作

我在某处有连接错误引用,但它们没有修复,解决方法是通过使用存储过程或表值函数提供的。

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

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

【讨论】:

    【解决方案2】:

    为什么还没有人提到VIEW?只需将您的选择语句推送到数据库视图中。然后,当发生变化时,您不必打开包裹,只需更改视图即可。

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

    【讨论】:

      【解决方案3】:

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

      使用存储过程增加了执行计划重用的机会。

      【讨论】:

        猜你喜欢
        • 2021-08-16
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 2017-01-20
        • 2011-03-16
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多