新しいSQL Server 2016機能を使用しています - 常に暗号化されています。それは非常にクールでシンプルな技術ですが、小数点タイプではありません。私は値を挿入すると常に暗号化を10進数(18,2)で使用する
、私はこの1つ(ZP_Test
- 私のDB名)のようなエラーを取得しています:
オペランドタイプ衝突:(encryption_typeは= 'の無作為化' で暗号化された小数(4,2)、 encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256'、column_encryption_key_name = 'ColomnKey'、column_encryption_key_database_name = 'ZP_Test')(encryption_typeは= '無作為'、encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256' で暗号化された小数(18,2)と互換性がない、column_encryption_key_name = 'ColomnKey'、column_encryption_key_database_name = 'ZP_Test')
ステートメントを準備できませんでした。
私のAPIはC#で書かれています。私のコードはおそらく解決策を知っていますか?エラーが発生したSQLでテーブルを作成
CREATE TABLE [dbo].[EmpInfo]
(
[EmpID] [int] NULL,
[NatID] [nvarchar](max) COLLATE Cyrillic_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [ColomnKey], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
[Amount] [decimal](18, 2) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [ColomnKey], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL
) ON [PRIMARY]
GO
C#コード例
command.CommandText = "INSERT INTO EmpInfo(EmpID, NatID, Amount) VALUES (@key, @ssn, @amount)";
command.Parameters.AddWithValue("@key", key);
command.Parameters.AddWithValue("@ssn", DBNull.Value);
command.Parameters.AddWithValue("@amount", Convert.ToDecimal("11.00"));
command.ExecuteNonQuery();
トレースの
SQLクエリ -
exec sp_describe_parameter_encryption N'INSERT INTO EmpInfo(EmpID, NatID, Amount, AmountDec) VALUES (@key, @ssn, @amount, @amountDec)',N'@key int,@ssn nvarchar(7),@amount decimal(4,2)'