변경된 Alberto의 쿼리를 실행하면 다음 시퀀스가 표시됩니다. 3, 2, 1, 0, 5, 4, 7, 6, 9, 8, 15, 14, 13, 12, 11, 10
즉, 해당 GUID의 바이트 # 3은 GUID의 바이트 # 10은 가장 중요한 [SQL Server ORDER BY 절의 관점에서 볼 때] 중요합니다. 6 바이트 그들이 가이 버전 비트를 포함 7로 증가하지
create function [dbo].[IncrementGuid](@guid uniqueidentifier)
returns uniqueidentifier
as
begin
declare @guid_binary binary(16), @b03 binary(4), @b45 binary(2), @b67 binary(2), @b89 binary(2), @bAF binary(6)
select @guid_binary = @guid
select @b03 = convert(binary(4), reverse(substring(@guid_binary,1,4)))
select @b45 = convert(binary(2), reverse(substring(@guid_binary,5,2)))
select @b67 = convert(binary(2), reverse(substring(@guid_binary,7,2)))
select @b89 = convert(binary(2), substring(@guid_binary,9,2))
select @bAF = convert(binary(6), substring(@guid_binary,11,6))
if (@b03 < 'FFFFFFFF')
begin
select @b03 = convert(binary(4), cast(@b03 as int) + 1)
end
else if (@b45 < 'FFFF')
begin
select @b45 = convert(binary(2), cast(@b45 as int) + 1)
end
else if (@b89 < 'FFFF')
begin
select @b89 = convert(binary(2), cast(@b89 as int) + 1)
end
else
begin
select @bAF = convert(binary(6), cast(@bAF as bigint) + 1)
end
return convert(binary(16), reverse(convert(char(4),@b03)) + reverse(convert(char(2),@b45)) + reverse(convert(char(2),@b67)) + convert(char(2),@b89) + convert(char(6),@bAF))
end
주 : 여기
이 차지하는 고유 식별자를 증가 간단한 함수이다. 하지만 다른 사람들이 당신을 가리키고 있습니다.
이 아니어야합니다. 귀하의 경우에는이 Guids에 대한 임시 테이블을 만드는 것이 더 좋을 수 있습니다 (두 개의 열이 있습니다 : 하나의 정수를 인덱스로 생성하고 두 번째 인덱스를 생성 된 Guids와 함께 사용).
나는 이것이 정말로 필요한 이유를 아는 것에 정말로 관심이 있습니다. – rein
GUID를 증가시켜야하는 상황에 처한 경우 10 번에서 9 번 시도하면 무엇을하려고하는지 다시 검사하게됩니다. –
GUID를 증가시키는 대신에, 추가 시퀀스 열을 추가하여 명확성을 제거하는 것이 더 간단할까요? – ahains