【问题标题】:SQL Query to display string values in a columnSQL 查询以在列中显示字符串值
【发布时间】:2013-07-07 23:47:44
【问题描述】:

我想写存储过程在传递参数1时得到如下输出,

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

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

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

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

【问题讨论】:

  • 根据什么逻辑选择显示哪些行?
  • 是的,听起来可能!你试过什么?
  • 在前端,如果我选择是,参数将作为 1 传递,如果没有,则参数为 2,然后在下拉框中填充相应的值
  • 我试过“选择'选项 1',选项 2',选项 3'”
  • 当这个简单的任务可以在前端自己处理时,为什么还要访问服务器/数据库?

标签: mysql sql sql-server sql-server-2008 tsql


【解决方案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

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

        【解决方案4】:
        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
        

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-08-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多