ssms 2017 中始终加密的 varchar 更新类型冲突

Man*_*anu -2 sql-server always-encrypted sql-server-2017

我正在使用 SSMS 17.6 并且我正在尝试始终加密功能。我能够通过声明一个参数然后使用该参数来更新/插入/搜索日期时间字段,例如:

DECLARE @NewValue datetime 
SET @NewValue = '19/05/2018' 
update MyTable set my_ae_column = @NewValue
Run Code Online (Sandbox Code Playgroud)

我正在尝试对设置了 bin2 排序规则的 varchar(30) 字段执行相同的操作,但我仍然得到

操作数类型冲突问题

有什么建议吗?

Aar*_*and 5

我的猜测是您没有检查本指南中的以下内容,其中指出您不能单独使用DECLARESET

在同一个语句中声明和初始化(内联初始化)。SSMS 不会参数化使用单独的 SET 语句声明的变量。

当我编写代码时遇到的错误您在问题中遇到的错误相同。这就是为什么我们要求破坏的代码,而不是有效的代码(尽管我怀疑您在问题中编写的代码是否有效!):

DECLARE @column nvarchar(30);
SET @column = N'whatever';
UPDATE ...
Run Code Online (Sandbox Code Playgroud)

当我声明变量并立即分配它时,它工作得很好,如下所示:

DECLARE @column nvarchar(30) = N'whatever';
UPDATE ...
Run Code Online (Sandbox Code Playgroud)

当然,这种不匹配可能由于各种其他原因而发生。例如不将连接设置为column encryption setting = enabled,不启用 SSMS 中的“启用参数化...”设置,在声明和分配变量时使用函数或表达式,使用错误的数据类型或长度或精度或小数位数等。我们可以如果您包含中断的代码,请帮助缩小范围。