存储过程SQL Server中IF ELSE的替代方法

Vbp

我是存储过程的新手,仍然在学习,下面是我尝试过并且仍在工作的内容。但是,我只进行了一次更改,ad.Indicator并且在中写入了三次相同的查询IF, ELSE IF

有一个更好的方法吗?(我正在使用SQL Server)

ALTER PROCEDURE TestingSP 
    @startdate Datetime, 
    @enddate Datetime,
    @source Varchar(10)
AS 
BEGIN 
   IF(@source = 'None')
      SELECT *
      FROM FD.T fd 
      INNER JOIN AD.T ad ON fd.OCD = ad.ACD 
      WHERE fd.SG BETWEEN @startdate AND @enddate

   ELSE IF(@source = 'Air')
      SELECT *
      FROM FD.T fd 
      INNER JOIN AD.T ad ON fd.OCD = ad.ACD 
      WHERE fd.SG BETWEEN @startdate AND @enddate AND ad.Indicator = 'True'

  ELSE IF(@source = 'Not Air')
      SELECT *
      FROM FD.T fd 
      INNER JOIN AD.T ad ON fd.OCD = ad.ACD 
      WHERE fd.SG BETWEEN @startdate AND @enddate AND ad.Indicator = 'False'
END
米奇小麦

一种方法(尽管这可能会导致更糟糕的查询计划):

Select *
FROM FD.T fd 
INNER JOIN AD.T ad on fd.OCD = ad.ACD 
WHERE fd.SG BETWEEN @startdate AND @enddate 
      AND ad.Indicator = CASE 
                              WHEN @source = 'Not Air' THEN 'False'
                              WHEN @source = 'Air' THEN 'True'
                              ELSE ad.Indicator
                         END

[是否会产生更好或更坏的计划还有待观察...]

另外,请注意:

  • 不建议使用SELECT *。使用明确的列列表

  • 包含字符串值“ True”和“ False”的列作为位列会更好

  • 如果日期中有时间部分,请多加注意。如果这样做,有几种方法可以解决此问题,也许最直接的方法是强制转换为Date数据类型(从SQL Server 2008开始):

    WHERE CAST(fd.SG as Date) BETWEEN @startdate AND @enddate 
    

但是请注意,这可能会使适当索引的使用无效。(还假设@startDate并且@enddate没有时间部分)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server:存储过程中的IF THEN ELSE

来自分类Dev

SQL Server 存储过程或重新启动 SQL Server 代理的替代方法

来自分类Dev

如何在SQL Server存储过程中使用if / else

来自分类Dev

获取 SQL Server 存储过程输入参数的方法

来自分类Dev

在存储过程中写入If方法的替代方法

来自分类Dev

存储过程从SQL Server中的存储过程本身获取价值

来自分类Dev

检查 SQL Server 中是否存在存储过程的不同方法

来自分类Dev

SQLite3中存储过程的替代方法

来自分类Dev

在SQL Server中获取存储过程的文本

来自分类Dev

AWS中的SQL Server CLR存储过程

来自分类Dev

SQL Server存储过程中的错误

来自分类Dev

在SQL Server中执行存储过程?

来自分类Dev

在SQL Server中运行多个存储过程

来自分类Dev

存储过程SQL Server中的多个条件

来自分类Dev

AWS中的SQL Server CLR存储过程

来自分类Dev

SQL Server 2012中的存储过程

来自分类Dev

SQL Server存储过程中的IF条件

来自分类Dev

SQL Server 中存储过程的可选参数

来自分类Dev

SQL Server存储过程参数

来自分类Dev

sql server存储过程IN参数

来自分类Dev

执行SQL Server存储过程

来自分类Dev

SQL Server存储过程参数

来自分类Dev

SQL Server存储过程选择

来自分类Dev

Laravel SQL Server 存储过程

来自分类Dev

SQL Server 存储过程优化

来自分类Dev

SQL Server 存储过程问题

来自分类Dev

SQL Server中for循环的替代方法

来自分类Dev

在SQL中创建存储过程

来自分类Dev

SQL中的嵌套存储过程