无法在动态SQL中使用CASE表达式

时间:2013-03-19 14:04:30

标签: sql sql-server-2008

在以下查询中,t2.stock有两个值(10)。我希望1值输出为IN0值为OUT。问题是我不能在这种类型的查询中使用CASE表达式。有没有办法做到这一点?

use DB1  
go

declare @SQL varchar(500),

Set @SQL=' select t1.ID,t1.Name,t2.stock 
    from table1 t1 
        inner join table2 t2 on t1.ID = t2.ID'

exec (@SQL)

2 个答案:

答案 0 :(得分:5)

如果通过此类查询表示动态查询,那么您可能对CASE和/或动态查询存在一些误解。通常,在动态查询中使用CASE表达式没有问题,其中的一个示例可以在@Gordon Linoff's answer中看到。

但是,如果你绝对坚持, 可以替代你的情况:

use DB1  
go

declare @SQL varchar(500);

Set @SQL=' select t1.ID, t1.Name, v.description as stock
    from table1 t1 
        inner join table2 t2 on t1.ID = t2.ID
        inner join (
           values (1, ''IN''),
                  (0, ''OUT'')
        ) t2 (stock, description) on t2.stock = v.stock
';
exec (@SQL);

答案 1 :(得分:0)

可以在动态SQL中使用case语句:

use DB1  
go

declare @SQL varchar(500),

Set @SQL='
select t1.ID, t1.Name, (case when t2.stock = 1 then ''IN'' else ''OUT'' end) as stock
from table1 t1 
     inner join table2 t2 on t1.ID = t2.ID
'

exec (@SQL)