Я тестирую всегда зашифрованный, чтобы потенциально использовать его в устаревших приложениях.Для теста я зашифровал столбец NVARCHAR в одной из базовых таблиц поиска в приложении.Я получил предупреждения от мастера шифрования, предупреждающие меня о том, что некоторые хранимые процедуры не соответствуют требованиям.После проверки процедуры я заметил, что она жалуется на конкретный оператор CASE для зашифрованного столбца (ПРИМЕЧАНИЕ: зашифрованный столбец - adl.adl_Text NVARCHAR (50) ).Столбец возвращает значение по умолчанию (предварительно определенная строка) в случае, если таблица PK равна нулю.Я понимаю, что ISNULL может работать здесь, но это пример проблемы.Сравнение строк с зашифрованным столбцом не проводится, поэтому я немного запутался в том, в чем проблема.
Я попытался использовать константу в верхней части процедуры вместо литеральной строки, встроенной в запрос.
DECLARE @add_removed NVARCHAR(50)
SET @add_removed = 'Address Removed'
SELECT addr.Field1
, addr.Field2
, CASE WHEN addr.FieldPK IS NULL THEN @add_removed ELSE adl.adl_Text END AS StatusReason
FROM address addr
LEFT JOIN Address_Delete_Reason adl ON adl.PK = addr.adl_FK
У меня ранее было:
SELECT addr.Field1
, addr.Field2
, CASE WHEN addr.FieldPK IS NULL THEN 'Address Removed' ELSE adl.adl_Text END AS StatusReason
FROM address addr
LEFT JOIN Address_Delete_Reason adl ON adl.PK = addr.adl_FK
Я получаю ошибку:
Error: Operand type clash: varchar is incompatible with nvarchar(50) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'DBTEST').