首页 > 解决方案 > SQL 不是 hard case 语句

问题描述

我正在处理存储过程的问题。我有以下内容:

SELECT @message = 'ID' + CAST(CASE WHEN @StoreID = 0 THEN 'BK' 
                                   WHEN @StoreID = 1 THEN 'MK'
                                        END AS VARCHAR (50)) + char(13)

这会发送一封电子邮件,内容为:ID: 'MK'ID:'BK'

目前我正在对 case 语句进行硬编码,但我需要从不同的表中提取字符串 ' BK'' '。MK

@StoreIDStore_Orders表。名称来自 Store 表。

我尝试过的一种方法是这样做:

SELECT @message = 'ID' + StoreName from db.Store where StoreName = StoreID and StoreID = @StoreID

当我执行代码时,它会找到正确的商店,但会说

将 varchar 值“MK”转换为数据类型 int 时转换失败。

但我不想转换'MK' 我想通过@StoreID 找到它来显示'MK'。

标签: sqlsql-server

解决方案


您是否正在寻找这样的东西:

SELECT CONCAT('ID: ' , CASE WHEN s.StoreID = 0 
THEN (select '(''' + colname + ''')' 
  from othertable ot where ot.colname = s.colname) 
WHEN s.StoreID = 1 
THEN (select '(''' + colname + ''')' 
  from othertable ot where ot.colname = s.colname)
END) AS 'Message'
FROM Store_Orders s

推荐阅读