【发布时间】:2017-05-25 14:16:49
【问题描述】:
我有一个列 "Amount" numeric(18,2),我使用 SSMS v17 的加密列向导对其进行了加密。列数据现已加密。
但是,我有一个使用类似的视图:
create SampleView
as
Select
*, Amount * Rate as TotalAmount
From
SampleTable
Where
Amount > 0
go
Rate 列的类型为 numeric(18,8)。
我无法创建此视图。它给出了数据类型不兼容的错误,因为一列是加密的,而另一列是明文。从我尝试过的各种排列中,我看到 > 0 的 Where 子句导致问题,并且 Select 列表中的 Amount*Rate 也不起作用。
与Amount*Rate相关的错误是(我注释了Where子句)
操作数类型冲突:使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', column_encryption_key_database_name = 'SampleDB') 加密的 numeric(18,2) 与 numeric 不兼容
与Where Amount>0相关的错误是(我在Select子句中注释了Amount*Rate)
使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', column_encryption_key_database_name = 'SampleDB') 和 tinyint 加密的数据类型 numeric(18,2) 在大于运算符中不兼容。
我尝试了这些,但效果不佳:
Where Amount > cast(0 as numeric(18,2)
Select Amount * cast(Rate as numeric(18,2)
我们不能声明变量,因为它是视图。而且这个视图正在被许多存储过程中使用。
任何想法表示赞赏。
【问题讨论】:
-
请粘贴准确的错误
-
@TheGameiswar 我现在已经粘贴了确切的错误。谢谢。
-
当 where 子句包含加密列时,似乎 where 子句仅支持相等查询
-
我没有看到任何文档支持为什么这个
Amount*Rate失败,但我想应该是由于加密列无法参与正常列的任何操作
标签: sql-server sql-server-2016 always-encrypted