1

私はUniqueIdentifierからBigIntへの変換とその逆に非常によく似た問題を解決しようとしていますか?残念ながら、この例はプロセス全体を示しているわけではなく、GUIDをBIGINTに戻すことだけを示しています。

整数をGUIDとして格納することはあまり有益ではないとすでに判断しているので、これを仮説の問題と呼びます。ただし、この時点で、変換プロセスが機能しない理由を知りたいだけです。

ステップ5まではすべて良さそうです。...

SELECT  1 AS Step
        ,100966116980299

SELECT  2 AS Step
        ,CONVERT(VARBINARY(8), 100966116980299, 1)

SELECT  3 AS Step
        ,CONVERT(UNIQUEIDENTIFIER, 
            CONVERT(VARBINARY(8), 100966116980299, 1)
        )

SELECT  4 AS Step   
        ,CONVERT(VARBINARY(8), 
            CONVERT(UNIQUEIDENTIFIER, 
                CONVERT(VARBINARY(8), 100966116980299, 1)
            ), 1
        )

SELECT  5 AS Step   
        ,CONVERT(BIGINT, 
            CONVERT(VARBINARY(8), 
                CONVERT(UNIQUEIDENTIFIER, 
                    CONVERT(VARBINARY(8), 100966116980299, 1)
                ), 1
            )
        )

結果

Step    Value
1       100966116980299
2       0x0F0000014B768901
3       0100000F-764B-0189-0000-000000000000
4       0x0F0000014B768901
5       1080863916129945857
4

1 に答える 1

4

ここでの問題は、100966116980299使用している値がそもそも解釈されていないことだと思いますBIGINT。最初に明示的なキャストを行った場合に何が起こるかを見てみましょうBIGINT

SELECT  1 AS Step
        ,CAST(100966116980299 AS BIGINT)

SELECT  2 AS Step
        ,CONVERT(VARBINARY(8), CAST(100966116980299 AS BIGINT), 1)

SELECT  3 AS Step
        ,CONVERT(UNIQUEIDENTIFIER, 
            CONVERT(VARBINARY(8), CAST(100966116980299 AS BIGINT), 1)
        )

SELECT  4 AS Step   
        ,CONVERT(VARBINARY(8), 
            CONVERT(UNIQUEIDENTIFIER, 
                CONVERT(VARBINARY(8), CAST(100966116980299 AS BIGINT), 1)
            ), 1
        )

SELECT  5 AS Step   
        ,CONVERT(BIGINT, 
            CONVERT(VARBINARY(8), 
                CONVERT(UNIQUEIDENTIFIER, 
                    CONVERT(VARBINARY(8), CAST(100966116980299 AS BIGINT), 1)
                ), 1
            )
        )

結果

Step    Value
1       100966116980299
2       0x00005BD40189764B
3       D45B0000-8901-4B76-0000-000000000000
4       0x00005BD40189764B
5       100966116980299
于 2012-08-03T20:31:36.310 に答える