代码之家  ›  专栏  ›  技术社区  ›  Brendan Long

IF/ELSE使存储过程不返回结果集

  •  0
  • Brendan Long  · 技术社区  · 16 年前

    我有一个存储过程,需要从以下两个数据库之一返回一些内容:

    IF @x = 1
        SELECT y FROM Table_A
    ELSE IF @x = 2
        SELECT y FROM Table_B
    

    或者 SELECT 独自一人会得到我想要的,但是 IF ELSE 使它停止归还任何东西。我试过:

    IF @x = 1
        RETURN SELECT y FROM Table_A
    ELSE IF @x = 2
        RETURN SELECT y FROM Table_B
    

    我看到的两个选择都很可怕:

    1. 做一个 UNION 确保只有一方有结果:

      工会 从表\u B中选择y,其中@x=2

    2. 创建一个临时表来存储其中的一行,并在每次运行此过程(lots)时创建和删除它。

    还有什么我能做的吗?选项1没有我想的那么糟糕吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   SQLMenace    16 年前

    你确定@x是1还是2?

    declare @x int
    
    set @x = 1
    
    IF @x = 1
        SELECT 'syscolumns',* FROM syscolumns
    ELSE IF @x = 2
        SELECT 'sysobjects',* from sysobjects
        else
        select 'not 1 or 2'
    

    顺便问一下,这条线该怎么办

    SELECT @y FROM Table_B
    

    不管TableB中有多少行,它只返回相同的变量@y

    declare @y int,@x int
    select @y = -500
    
    
    IF @x = 1
        SELECT  @y = y FROM Table_A
    ELSE IF @x = 2
        SELECT  @y = y FROM Table_B
    
    return @y
    
        2
  •  3
  •   Philip Kelley    16 年前

    首先,为什么是“其他人”?

    IF @x = 1 
        SELECT y FROM Table_A 
    IF @x = 2 
        SELECT y FROM Table_B 
    

    第二,有没有可能@x是空的?如果是,两个查询都不会运行。

    IF isnull(@x, 0) not in (1,2)
        RAISERROR('Data invalid, reformatting C:\', 20, 1)
    

    (好的,你可以有一个更好的错误信息,但那肯定会吓到我…)