【问题标题】:If/Else statement return select query in T-SQLIf/Else 语句在 T-SQL 中返回选择查询
【发布时间】:2011-05-31 19:19:36
【问题描述】:

我需要为 SQL Server 编写一个存储过程。 它必须是这样的:

Select * from tblSomething
Where param in (If param1 like 'string' select * from tblTable where condition1
            Else select * from tblTable where condition2)

所有 if else 示例的问题都打印了一些内容并且不返回选择查询。 你能帮忙吗???

【问题讨论】:

  • 只是我还是这个问题由于发布的示例而变得更加混乱?提供样本数据、预期结果等。
  • 只有你。这不是一个普通的 SQL SELECT 语句。

标签: sql-server tsql stored-procedures


【解决方案1】:
IF param1 LIKE 'string'
    SELECT *
        FROM tblSomething
        WHERE param IN (SELECT * FROM tblTable WHERE condition1)
ELSE
    SELECT *
        FROM tblSomething
        WHERE param IN (SELECT * FROM tblTable WHERE condition2)

【讨论】:

  • 这可行,但您也可以使用 OR 将其设为布尔类型表达式。是的,它可能会更慢,但它的尺寸也更小。 +1 无论哪种方式。
【解决方案2】:

我不确定这是否是你要找的。​​p>

IF EXISTS (SELECT * FROM tblSomething WHERE param1 like 'string')
  SELECT * FROM tblSomething WHERE param IN (SELECT * FROM tblTable WHERE condition1)
ELSE
  SELECT * FROM tblSomething WHERE param IN (SELECT * FROM tblTable WHERE condition2)

我是 TSQL 的新手,因此任何需要改进的 cmets 将不胜感激。

【讨论】:

  • 我明白了;感谢您的提示。我会将其更新为EXISTS (SELECT * ...。那么查询中的TOP 1 呢? EXISTS (SELECT TOP 1 * FROM 会比 EXISTS (SELECT * FROM 快吗?
  • 完全一样。 TOP 和选择列表被忽略(根据 ANSI 链接)
  • 我经常使用它,我认为TOP 1 0 更快,但现在我发现它更慢,因为解析TOP 1 语句需要一些额外的时间。谢谢大佬。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2015-05-04
  • 2021-05-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
相关资源
最近更新 更多