Cara umum adalah dengan menyimpan nilai terenkripsi dan hash satu arah dari nilai. Saat Anda mencari nilai tertentu, Anda akan mencari hash. Dengan cara ini Anda dapat melakukan kueri secara efisien, tanpa harus mendekripsi setiap baris untuk menemukan nilai yang Anda minati:
create table Table (
EncryptedColumn varbinary(max),
HashValue binary(20),
PlainA int,
PlainB varchar(256),
PlainC Datetime);
create index ndxTableHash on Table(HashValue);
select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm);
Secara teori, Anda dapat memiliki konflik hash sekali dalam bulan biru, agar paranoid-aman Anda menambahkan cek ganda pada kolom yang didekripsi:
select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm)
and DecryptByKey(..., EncryptedColumn) = @searchTerm;
Lihat juga Mengindeks data terenkripsi dan SQL Server 2005:mencari data terenkripsi .