【问题标题】:Can i have multiple select but only return one result set我可以多选但只返回一个结果集吗
【发布时间】:2013-02-14 10:43:07
【问题描述】:

如果我有多个这样的选择:

select * from A where A.name = 'linköping'

IF @@ROWCOUNT = 0
begin
    select * from A where A.amount = 45
end

...如果第一个选择返回内容,我会得到 1 个结果集。但如果它运行第二个,我会得到两个结果集;第一个没有行,第二个有一些行。

有没有办法在第二次选择运行时只返回第二个结果集?

我写这样的代码是因为 Andrey Gordeev 对这篇文章的回答:Can you have if-then-else logic in SQL?

(MSSQL 2000)

谢谢!

【问题讨论】:

  • 在这种情况下你应该使用IF EXISTS

标签: sql


【解决方案1】:

您需要通过检查是否会在运行选择之前获得任何结果来防止第一次选择。

例如:

IF EXISTS (SELECT 1 FROM A WHERE A.name = 'linköping')
BEGIN
    SELECT * FROM A WHERE A.name = 'linköping'
END
ELSE 
BEGIN
    SELECT * FROM A WHERE A.amount = 45
END

【讨论】:

  • 如果你把第一行换成IF EXISTS (SELECT 1 FROM A WHERE A.name = 'linkoping')就好了
  • @ViswanathanIyer 同意。这将是轻微的性能提升。我必须承认我从下面的行中复制并粘贴了查询:)
【解决方案2】:

不,不可能返回结果取决于选择语句的数量。 如果您想做单选,请关注@RB 或@Jwalin Shah 解决方案。

【讨论】:

    【解决方案3】:

    这将适用于 IF-ELSE 逻辑。 [已测试]

    DECLARE @count as int
    set @count = (SELECT count(1) from A where A.name = 'linköping')
    if (@count = 0)
    BEGIN
        select * from A where A.amount = 45
    END
    ELSE
    BEGIN
    select * from A where A.name = 'linköping'
    END
    

    【讨论】:

      【解决方案4】:

      试试这个

      IF @@ROWCOUNT = 0
      BEGIN
          select * from A where A.amount = 45
      END
      ELSE
      BEGIN
          select * from A where A.name = 'linköping'
      END
      

      【讨论】:

        猜你喜欢
        • 2016-03-29
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-10
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        相关资源
        最近更新 更多