【发布时间】:2016-04-02 18:28:16
【问题描述】:
更新: 似乎有一些证书或规则在使用加密列数据的打开查询上运行。我发现以下会产生一个未加密的值 concat 'more'。我将必须与我们的 DBA 核实可能导致此行为的原因。
case when s.EncryptedColumn is not null then concat(s.[EncryptedColumn], ' more') else s.[RawColumn] end
我正在尝试将 null 与 varbinary(16) 列进行简单比较,但是我无法让结果返回 true。
这是我尝试过的:
尝试 1:
select
s.[EncryptedColumn],
(case when s.[EncryptedColumn] is not null
then s.[EncryptedColumn]
else s.[RawColumn]
end) as 'result'
结果 1:加密数据,原始数据
尝试 2:
select
datalength(s.[EncryptedColumn]),
(case when datalength(s.[EncryptedColumn]) > 0
then s.[EncryptedColumn]
else s.[RawColumn]
end) as 'result'
结果2:加密数据长度(16),原始数据
有什么想法吗?
【问题讨论】:
-
不清楚你在问什么。这些结果在哪里?我看不到 result1 之后的文本如何与尝试 1 中的查询相关联?
-
coalesce(EncryptedColumn, RawColumn)是否满足您的需求?顺便说一句,datalength(null)为空。所以这可能是第二次尝试的一个问题。 -
对@MartinSmith 的困惑感到抱歉。我有一个非空加密列,并且两个选择都返回证据表明它在所选的第一列中不为空。只有case的结果总是假的。
-
@marc_s,感谢您进行格式编辑。我正在使用 SQL Server 2014
-
了解您正在处理的价值观可能会有所帮助。第一次尝试表明您真的想要
coalesce()。第二个建议也许你正在做datalength(0x)。还有更多的故事吗?我当然不想看到你加密的数据。
标签: sql sql-server-2014 comparison-operators varbinary case-statement