最初にエラーから始めましょう:
列/変数の暗号化スキームの不一致。列/変数の暗号化スキームは(encryption_type = 'PLAINTEXT')であり、行 '3'付近の式は(encryption_type = 'DETERMINISTIC'、encryption_algorithm_name = ' AEAD_AES_256_CBC_HMAC_SHA_256 '、column_encryption_key_name =' CEK_P_H '、column_encryption_key_database_name =' Payments_Hub ')(または弱い)
ストアドプロシージャの使用時にAlwaysEncrypt暗号化を使用して列に挿入しようとしています。
列「PARAMETER_VALUE」は暗号化された列です
CREATE PROCEDURE dbo.SP_UI_Parameter
(
@ID int OUTPUT,
@OPERATION_ID int,
@PARAMETER_NAME varchar(100),
@PARAMETER_METRIC varchar(100),
@PARAMETER_VALUE varchar(100)
)
AS
BEGIN
IF @ID IS NULL
BEGIN
INSERT INTO [dbo].[TOKEN_PARAMETER] (OPERATION_ID,
PARAMETER_NAME, PARAMETER_METRIC, PARAMETER_VALUE)
SELECT @OPERATION_ID, @PARAMETER_NAME, @PARAMETER_NAME, @PARAMETER_VALUE
SET @ID = SCOPE_IDENTITY()
END
ELSE
BEGIN
UPDATE [dbo].[TOKEN_PARAMETER] SET
OPERATION_ID = @OPERATION_ID,
PARAMETER_NAME = @PARAMETER_NAME,
PARAMETER_METRIC = @PARAMETER_METRIC,
PARAMETER_VALUE = @PARAMETER_VALUE
END
END
GO
クエリでエラーが発生するのはなぜですか?
STORED PROCEDUREに含める必要があるものはありますか?
SQL Serverバージョン情報:(編集済み)
Microsoft SQL Server 2016(SP1-CU7-GDR)(KB4057119)-13.0.4466.4(X64)Dec 22 2017 2017 11:25:00 Copyright(c)Microsoft Corporation Enterprise Edition:Core-based Licensing(64-bit)on Windows Server 2016 Datacenter 10.0(Build 14393:)(ハイパーバイザー)
SSMSストアドプロシージャコール:(編集済み)
DECLARE @return_value int,
@ID int
EXEC @return_value = [dbo].[SP_Insert_Parameter2]
@ID = @ID OUTPUT,
@OPERATION_ID = 3,
@PARAMETER_NAME = N'algorithm',
@PARAMETER_METRIC = N'algorithm',
@PARAMETER_VALUE = N'99999'
SELECT @ID as N'@ID'
SELECT 'Return Value' = @return_value
GO
前もって感謝します
だから私は私が間違っていたことを理解しましたAlwaysEncryptedは変数をインラインで定義する必要があります:
DECLARE @OPERATION_ID int = 4
DECLARE @PARAMETER_NAME varchar(100) = 'algorithm'
DECLARE @PARAMETER_METRIC varchar(100) = 'algorithm'
DECLARE @PARAMETER_VALUE varchar(100) = 'TestValue3'
INSERT INTO [dbo].[TOKEN_PARAMETER] (OPERATION_ID, PARAMETER_NAME,
PARAMETER_METRIC, PARAMETER_VALUE)
SELECT @OPERATION_ID,
@PARAMETER_NAME,
@PARAMETER_METRIC,
@PARAMETER_VALUE
これにより、テーブルへの挿入が成功します。ストアドプロシージャを使用する場合、同じメソッドを使用して挿入することはできません。
したがって、本質的に、ストアドプロシージャの動作方法に問題はありません。アプリケーションは、同じストアード・プロシージャーを使用して、列を取り込む方法を変更する必要があります
以下のリンクを参照してください:
アプリケーションチームが結果を返すのをまだ待っていますが、これで問題が解決した場合は、質問を解決済みとしてマークします