CASE returns 汉字时问到return一个VARBINARY列的值

CASE returns Chinese characters when asked to return a VARBINARY column value

我正在尝试使用以下查询从 key/value table 中检索值。如果 key 列的值是 "OrderNumber" 或 "CustomerNumber",那么,而不是 val 列,我想从同一个 key/value table 中获得另一列的值 (valHash)(我们几乎可以称它为 key/value /哈希值 table)。

但是当我 运行 查询时,当我的 CASE 满足其第一个条件时,我得到了汉字:

SELECT IssueId, 
    customfield,
    CASE 
        WHEN customfield IN ('OrderNumber', 'CustomerNumber') THEN valHash
        ELSE val
    END AS Value,
    valHash
FROM MyTable

valHash 列数据类型为 VARBINARY

问题可能出现在 Val 中。因为一列有一种数据类型,你可以选择这个:

SELECT IssueId, 
    customfield,
    CASE 
        WHEN customfield IN ('OrderNumber', 'CustomerNumber') THEN valHash
        ELSE CAST (val AS VARBINARY (500))
    END AS Value,
    valHash
FROM MyTable

如果你想把所有的东西都作为一个字符串,你可能想使用这个:

SELECT IssueId, 
    customfield,
    CASE 
        WHEN customfield IN ('OrderNumber', 'CustomerNumber') THEN CONVERT (NVARCHAR (50), Valhash, 2)
        ELSE val )
    END AS Value,
    valHash
FROM MyTable

如果你坚持区分VARCHAR和VARBINARY是不同的情况,你需要一个额外的列。