Как сравнить varbinary в предложении где в SQL Server - PullRequest
3 голосов
/ 11 июля 2011

Я хочу сравнить varbinary тип с байтовым массивом. Я пытался до сих пор:

DECLARE @data AS NVARCHAR(MAX)='4283'

Select * from table1 Where bindayData=CAST(@data AS VARBINARY)

Но это не работает.

Я отмечаю одно странное поведение: когда я статически использую его, как

Select * from table1 Where bindayData=CAST('4283' AS VARBINARY)

тогда все работает нормально. Но когда я объявляю переменную, она не работает.

Пожалуйста, поделитесь своими идеями.

Спасибо, Нареш Горадара

1 Ответ

9 голосов
/ 11 июля 2011

Попробуйте

DECLARE @data AS NVARCHAR(MAX)='4283'

Строковая константа '4283' не является Unicode в CAST, один байт на символ.
Это дает 4 байта varbinary 0x34323833

Когда вы используете NVARCHAR (MAX), он меняется на Unicode N'4283' строку с 2 байтами на символ.
Это дает 8 байт varbinary, что-то вроде 0x0034003200380033

...