我需要在触发器中使用SQL Server GUID进行一些数学运算,并且我很难弄清楚如何将uniqueidentifier
转换为numeric(38,0)
。
一个潜在的问题:我的理解是这两种数据类型都是16字节的“整数”。如果我在这里错了,请纠正我。
否则,我将如何进行此转换?我已经尝试过CAST和CONVERT,并且每当我尝试时,不允许从数据类型uniqueidentifier到数字的显式转换不允许。作为错误消息。我真的不想解析每个字符并在UDF中进行十六进制数学运算。
这可能吗?
这是我的脚本,可以快速重现:
DECLARE @guid uniqueidentifier
SET @guid = NEWID()
DECLARE @a numeric(38,0)
SET @a = 2
PRINT CAST(@guid AS numeric(38,0)) -- fails
PRINT @guid / @a -- also fails
答案 0 :(得分:0)
不幸的是,我没有偶然发现从VARCHAR
的十六进制值到NUMERIC
一次循环一个数字的转换。
declare @GUID as UniqueIdentifier = NewId()
declare @Binary as VarBinary(64) = @GUID
declare @String as VarChar(64) = Convert( VarChar(64), @Binary, 2 )
select @GUID as 'GUID', @Binary as 'Binary', @String as 'String'