Intereting Posts
LINQ to SQL несколько таблиц слева внешнее соединение ORA-00942: таблица или представление не существует (работает, когда отдельный sql, но не работает внутри функции oracle) ParseKit – синтаксический анализатор SQLite, идущий в бесконечную рекурсию Как мы реализуем отношения IS-A? Управление и отладка SQL-запросов в MS Access Каким будет лучший способ сохранить порядок записей в SQL? Предоставить привилегии для конкретной базы данных в PostgreSQL Как использовать столбец temp в предложении where Может ли подзапрос использоваться в заявлении Oracle ALTER? PostgreSQL – ОШИБКА: запрос не имеет адресата для данных результата Код ошибки MySQL: 1064. У вас есть ошибка в синтаксисе SQL MySQL выбирает MAX (datetime), не возвращая максимальное значение C # ASP.Net Parameters.AddWithValue отклоняет значение null для параметра Как получить значение миллисекунды из поля Timestamp в firebird с помощью Delphi 2007 Oracle Объединить несколько столбцов в один

varbinary to varchar w / o master.dbo.fn_varbintohexstr

Есть ли способ конвертировать varbinary в строку ASCII varchar (base64, md5, sha1 – неважно) без функции master.dbo.fn_varbintohexstr на MS SQL Server 2005? Потому что он не может использоваться внутри вычисленного столбца.

CONVERT и CAST возвращают строки, отличные от ASCII.

Спасибо,

Денис.

Для md5 и sha1 вы можете использовать хеш-байты . Чтобы получить base64, вы можете создать udf, который преобразует и использует это в вычисленном столбце.

Функция BinToBase64:

create function BinToBase64(@Bin varbinary(max)) returns varchar(max) as begin return CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:variable("@Bin")))', 'VARCHAR(MAX)') end 

Функция BinToHexString:

 create function BinToHexString(@Bin varbinary(max)) returns varchar(max) as begin return '0x' + cast('' as xml).value('xs:hexBinary(sql:variable("@Bin") )', 'varchar(max)'); end 

Используйте следующее:

 create table TestTable ( Col1 varbinary(max), Col2 as dbo.BinToHexString(hashbytes('MD5', Col1)), Col3 as dbo.BinToHexString(hashbytes('SHA1', Col1)), Col4 as dbo.BinToBase64(Col1), ) insert into TestTable values (12345) select * from TestTable 

Уникальный разделительный столбец ограничений с использованием хеш-байтов и столбца uniqueidentifier

 create table TestTable ( ID uniqueidentifier default(newid()), Col1 varbinary(max), Col2 as coalesce(hashbytes('MD5', Col1), cast(ID as varbinary(8000))) persisted ) create unique index IX_TestTable_Col2 on TestTable(Col2)