代码之家  ›  专栏  ›  技术社区  ›  Ben

基于sql中case语句创建select语句

sql
  •  1
  • Ben  · 技术社区  · 14 年前

    sql中有没有一种干净的方法可以基于case语句创建select语句?

    我在寻找基本逻辑

       CASE @tableToUse
               WHEN 'Table1' SELECT * FROM Table1 
               WHEN 'Table2' SELECT * FROM table2 
               DEFAULT 'Table3' SELECT * FROM table3
       END CASE
    
    5 回复  |  直到 14 年前
        1
  •  5
  •   TLiebe    14 年前

    在T-Sql(mssqlserver)中,您可以动态地编写Sql语句,然后使用 sp_executesql 方法来执行它。根据您的case语句,您可以使用变量构建SELECT语句,然后使用sp\u executesql来运行它。需要注意的一点是,如果您直接使用来自用户的文本来防止SQL注入攻击,那么您需要确保清除来自用户的任何输入。

    DECLARE @sql NVARCHAR(200)
    
    SELECT @sql = CASE @tableToUse
        WHEN 'Table1' THEN 'SELECT * FROM Table1'
        WHEN 'Table2' THEN 'SELECT * FROM Table2'
        ELSE 'Table3' THEN 'SELECT * FROM Table2'
        END
    
    EXECUTE sp_executesql @sql
    

    您应该能够在其他版本的SQL中执行类似的操作。

        2
  •  5
  •   Astro    11 年前

    CASE WHEN <Variabe> THEN (SELECT <Column> FROM <Table>) END
    
        3
  •  3
  •   JohnFx    14 年前

    抱歉,tSQL中的Case语句(我假设您正在询问)仅用于计算表达式,不能用于控制流。

    IF (@Something='Table1')
        SELECT Field1 from table1
    ELSE
       IF (@Something='Table2')
            SELECT Field1 from table2
       ELSE
            SELECT Field1 From table3
    
        4
  •  0
  •   HLGEM    14 年前

    为什么不直接加入username上的testTable呢?

        5
  •  0
  •   Baaju    14 年前

    你能做到的!只是您不能执行“select*”,因为它可能返回多个引发错误的值,即使该值必须是一个包含单个列的表

    SELECT   columnName = CASE WHEN 'foo' THEN select <Column_Name> from tableName where columnName = 'this'  
                               WHEN 'bar' THEN select <Column_Name>  from tableName where columnName = 'that' 
    END 
    FROM tableName