0

当我传递参数1时,我想编写存储过程以获得以下输出,

 column_name
 -----------
  option 1
  option 2
  option 3

当我传递参数 2 时,输出应该是,

  column_name
  -----------
    option 5
    option 6

是否可以在不使用任何表的情况下创建过程来获取此输出?

4

5 回答 5

1

SELECT FROM VALUES用于此类任务。您的情况可能的解决方案:

SELECT column_name
FROM (VALUES
         ( 'option 1' )
        ,( 'option 2' )
        ,( 'option 3' )
     ) result (column_name)
WHERE @param = 1

UNION

FROM (VALUES
         ( 'option 5' )
        ,( 'option 6' )
     ) result (column_name)
WHERE @param = 2
于 2013-07-10T09:24:24.033 回答
0
CREATE PROCEDURE uspTest 
(
   @param INT
)
AS
BEGIN

    IF @param = 1
       SELECT 'Option 1' column_name 
       UNION ALL
       SELECT 'Option 2'  
       UNION ALL
       SELECT 'Option 3' 
    ELSE
       SELECT 'Option 5' column_name  
       UNION ALL
       SELECT 'Option 6'  
 END
于 2013-07-10T07:17:54.943 回答
0

通过使用 SELECT 和 UNION 的组合,您可以生成如下手动构建的表:

SELECT 'Option 1' as Option
UNION
SELECT 'Option 2' as Option
UNION
SELECT 'Option 3' as Option

您可以将此与控制/流语句结合起来,以确定应使用哪个 SELECT/UNION 组合。不幸的是,你有 MySQL 和 sql server 标签,所以我不能让存储过程的语法更具体,但希望这应该是你熟悉的一点!

于 2013-07-10T06:48:16.997 回答
0

无需在数据库中创建任何物理表来存储这些信息。您可以在存储过程中使用临时表或表变量来存储这些数据。您可以创建存储过程,例如:

create PROCEDURE temp
@id int
AS
BEGIN
    declare @temptable table (column_name varchar(max))

    if @id = 1
    begin
        insert into @temptable values('option 1');
        insert into @temptable values('option 2');
        insert into @temptable values('option 3');
    end

    if @id = 2
    begin
        insert into @temptable values('option 4');
        insert into @temptable values('option 5');
    end

    select * from @temptable            
END
GO
于 2013-07-10T06:49:02.680 回答
0
CREATE PROCEDURE sp_ArbitraryOutput (@parm Int)
AS
    CASE 
       WHEN COALESCE(@parm, 1) = 1 THEN 
           SELECT "option 1" AS column_name
              UNION 
           SELECT "option 2" AS column_name
              UNION 
           SELECT "option 3" AS column_name
       WHEN @parm = 2 THEN          
           SELECT "option 4" AS column_name
              UNION 
           SELECT "option 5" AS column_name
              UNION 
           SELECT "option 6" AS column_name
    END
GO
于 2013-07-10T06:50:48.727 回答