0

トリガーでSQLServerGUIDを使用していくつかの計算を行う必要があり、をに変換する方法を理解するのに苦労しuniqueidentifierていnumeric(38,0)ます。

潜在的な問題の1つ:私の理解では、これらのデータ型は両方とも16バイトの「整数」です。ここが間違っている場合は、訂正してください。

それ以外の場合、この変換についてはどうすればよいですか?CASTとCONVERTを試しましたが、データ型のuniqueidentifierから数値への明示的な変換は許可されていません。試行するたびにエラーメッセージとして表示されます。これを行うために、各文字を解析してUDFで16進演算を行う必要がないようにしたいと思います。

これは可能ですか?

これが、この本当の速さを再現するための私のスクリプトです。

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
4

1 に答える 1

0

残念ながら、私はaの16進値から、一度に1桁をループ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'
于 2012-11-14T22:34:07.053 に答える