Я нашел способ использования жестко закодированных строк в процедурах.
- Создайте таблицу со столбцом nVarchar (Примечание: зашифрованный nvarchar не совместим с зашифрованным varchar. Кроме того, вы не можете назначить значение с большей длиной данных для зашифрованных значений с меньшей длиной данных (например, вы не можете назначить зашифрованную переменную / столбец nVarchar (max) для зашифрованного столбца nVarchar (20)). Поэтому выберите меньший размер, насколько это возможно.)
- Зашифруйте столбец с тем же типом шифрования и ключом, что и у рассматриваемого столбца.
- Теперь вы можете использовать значение из таблицы для вставки, обновления, сравнения и т. Д. операции. Вы также можете использовать такие функции, как coalesce, isnull и т. Д.
Пример:
Создать таблицу с зашифрованным столбцом
CREATE TABLE [dbo].[Encrypted_nVarchar_256](
[SNo] [smallint] IDENTITY(-32768,1) NOT NULL,
[EncryptValue] [nvarchar](256) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_key], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
[Value_Description] [nvarchar](256) NULL,
CONSTRAINT [Pk_Enc_nVar_256] PRIMARY KEY CLUSTERED
(
[SNo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Вставьте текст в зашифрованный столбец значение, которое вы хотели бы использовать в процедурах.
DECLARE @EncryptValue nvarchar(256) ='';
INSERT INTO Encrypted_nVarchar_256(EncryptValue,[Value_Description]) VALUES(@EncryptValue,'Empty string')
DECLARE @EncryptValue1 nvarchar(256) ='Some string you would like to hard code';
INSERT INTO Encrypted_nVarchar_256(EncryptValue,[Value_Description]) VALUES(@EncryptValue1,'Your description')
--more rows as you need
GO
Теперь вы можете потреблять в хранимой процедуре
CREATE PROCEDURE InsertProc
@Var1 nVarchar(20)
As
BEGIN
--Passing hard coded ''(Empty string) as insert value
INSERT INTO testTable(EncryptedCol1,EncryptedCol2,NonEncryptedCol)
SELECT TOP 1 EncryptValue,@Var1,"some string" FROM Encrypted_nVarchar_256 where Sno=-32768
--Comparing some hard coded string
SELECT * from testTable
where EncryptedCol1=(SELECT TOP 1 EncryptValue FROM Encrypted_nVarchar_256
where Sno=-32768)
--Using in functions
SELECT COALESCE(EncryptedCol1,(SELECT TOP 1 EncryptValue FROM Encrypted_nVarchar_256 where Sno=-32768)) as [new col name] from testable
END
Вуаля !!! теперь вы можете сделать что-нибудь с небольшим поворотом.