Показать сообщение отдельно
Старый 17.02.2006, 16:39   #6  
Lukich is offline
Lukich
Участник
 
4 / 10 (1) +
Регистрация: 16.02.2006
SQL.RU помог
Решение:
Код:
create FUNCTION dbo.fnBinaryToInt
(@Bin varbinary(4))
RETURNS int
AS
	BEGIN
	if Len(@Bin)<4
		set @Bin=SUBSTRING(@Bin+0x00000000,1,4)
	RETURN CONVERT(int, Convert(binary(4), REVERSE(CONVERT(char(4), @Bin))))
	END
go

create function dbo.fnSIDToStrSID(@sid as varbinary(85))
returns varchar(119)
AS
BEGIN
--SET NOCOUNT ON
	declare @ssid varchar(119), @SAC tinyint,  @i as tinyint, @b4 as binary(4)
	
	set @ssid='S-'+LTRIM(STR(cast(SUBSTRING(@sid,1,1) as tinyint)))+'-'+LTRIM(cast(CONVERT(bigint, 0x0000+SUBSTRING(@sid,3,6)) as varchar(64)))
	set @SAC=cast(SUBSTRING(@sid,2,1) as tinyint)
	
	set @i=0
	while @i<@SAC begin
	  set @b4=SUBSTRING(@sid,@i*4+9,4)
	  set @ssid=@ssid+'-'+LTRIM(STR(dbo.fnBinaryToInt(@b4)))
	  set @i=@i+1
	end
	
	--select  master.dbo.fn_varbintohexstr(@sid) HexSID, @ssid StrSID
	return @ssid
END