2016-12-05 4 views
1

テーブル内の1つの列mob_noを暗号化しました。 暗号化された列の後、ストアドプロシージャにエラーが発生しています。私は怒鳴るエラー常に暗号化された列からストアドプロシージャのパラメータへの値を選択する方法

メッセージ33299、列/変数の@mobNo 'の 暗号化方式の不一致を持って、このSPを実行すると

私は

create procedure get_cut 

@mobNo varchar(50), 

@custId int 

As 

Begin 

if(@mobNo = null or @mobNo = '') 

Begin 

    select @mobNo = mob_no 
    from table1 where cust_id = @custId 



End 

select cust_name from tbl_cust where mob_no = @mobNo and cust_id = @custId 


End 

以下SPが追加されました。列/変数の 暗号化方式が '9'(encryption_type = 'PLAINTEXT') とライン周辺の表現であることが(encryption_type = 'DETERMINISTIC' encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256' column_encryption_key_name = 'XXXX' であると想定し、column_encryption_key_database_name = 'mydb') (または弱い)。あなたのストアドプロシージャ内

答えて

1

次等価条件

@mobNo = '' 

サーバーで評価されます。 Always Encryptedを使用しているため、mobNoに対応する列はバイナリデータとしてサーバーに格納されます。サーバは、サーバが''

に対応する暗号化されたバイナリ値を知らないので、あなたは次のように3つの引数の代わりに、2を取るために、ストアドプロシージャを変更することができ''に対して、データベース内の値を比較することはできません。

create procedure get_cut 
@mobNo varchar(50),  
@custId int, 
@emptyString varchar(50) 
... 
if(@mobNo is null or @mobNo = @emptyString) 
... 

注:is nullの代わり= null

あなたは

としての価値 ''を渡すことができますあなた SqlCommand
  • パラメータ、あなたがターゲットと平文の値を送信する方法を理解するために、ストアドプロシージャ、検索Parameterization for Always Encryptedを実行するSQL Server Management Studioを使用している場合は、あなたのストアドプロシージャまたは
  • を実行するためのアプリケーションを使用している場合あなたは次の操作を行うことができます(Requires at least SSMS version 17.0.) SSMSから、一例として、暗号化された列

、:

Declare @emptyStringVar varchar(50) = '' 
Declare @mobNoVar varchar(50) = '000-000-0000' 
EXEC get_cut 
@mobNo varchar = @mobNoVar 
@custId int = 1234 
@emptyString @emptyStringVar 
関連する問題