在STORED PROCEDURE SQL SERVER内部使用Always Encrypted

时间:2019-10-28 10:14:16

标签: sql-server stored-procedures always-encrypted

我正在尝试使用DETERMINISTIC类型的加密列执行SP。 我收到以下错误:

  

消息206,级别16,状态2,过程sp_ConvertCard_advancedSearch,第0行[批处理开始第22行]

     

操作符类型冲突:varchar与使用(encryption_type ='DETERMINISTIC',encryption_algorithm_name ='AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name ='idan_test_col',column_encryption_name ='p_database'加密的nvarchar(50)不兼容      

消息206,级别16,状态2,过程sp_ConvertCard_advancedSearch,第0行[批处理开始第22行]

     

操作符类型冲突:varchar与使用(encryption_type ='DETERMINISTIC',encryption_algorithm_name ='AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name ='idan_test_col',column_encryption_name ='p_database'加密的nvarchar(50)不兼容

存储过程:

ALTER PROCEDURE [dbo].[sp_ConvertCard_advancedSearch]
       @token nvarchar(50) = null
AS 

SET NOCOUNT ON
BEGIN
   -- Insert statements for procedure here

                           SELECT
                                  *
                           FROM
                                  ConvertCard
                           WHERE
                                  Token = @token

              -- order by

                           ORDER BY Id DESC

END

所以我的问题是,如何才能以正确的方式执行此SP?

  • 我正在为始终加密使用启用参数化
  • 我在SSMS的其他连接参数中添加了列加密设置=启用

1 个答案:

答案 0 :(得分:0)

好吧,“问题”是我试图执行

这样的存储过程。

exec [sp_ConvertCard_advancedSearch] '123456789'

当我通过SqlCommand参数从Visual Studio中执行它时,它就起作用了。

谢谢。