1

にあるAuctionIdをキャストしてから、UNIQUEIDENTIFIERに戻そうとしてUNIQUEIDENTIFIERvarchar(36)ます。私を助けてください。

CAST((SUBSTRING(CAST([AuctionId] as VARCHAR(36)), 0, 35) + '1') AS UNIQUEIDENTIFIER)

しかし、私はこのエラーを受け取り続けます:

メッセージ8169、レベル16、状態2、行647文字列からuniqueidentifierへの変換時に変換に失敗しました。

前もって感謝します

4

3 に答える 3

5

「1」は問題ではありません。明らかに、GUIDの最後の文字を1に変更しようとしています。理由はわかりませんが、それが要件です。

あなたの問題は部分文字列にあります。TSQLでは、サブストリングはCやC#のように0ではなく1から始まるインデックスを使用します。これは、サブストリングステートメントが実際に34文字の文字列を返していることを意味します(+1文字が35になると、35文字の文字列はGUIDではないと言われます。これは正しいです)。

に変更するだけ,0,35です1,35

于 2010-04-23T12:50:14.660 に答える
3

エラーは、+'1'とSUBSTRINGが原因です。何のためにあるの?

これはうまくいきます

SELECT cast((cast(NEWID() as varchar(36))) as UNIQUEIDENTIFIER)

編集:わかりました。最後の文字を「1」に置き換えたい場合は、これが解決策です。

SELECT CAST(SUBSTRING(CAST(NEWID() AS VARCHAR(36)), 1, 35) + '1' AS UNIQUEIDENTIFIER)

唯一の違いは、SQLのSUBSTRINGは、位置0ではなく位置1から始まることです。

PSこれは危険なコードです。GUIDの生成に使用されたアルゴリズムに準拠しないため、出力はGUIDではなくなります。これにより、(可能性は低いですが)GUIDとの衝突が発生し、あらゆる種類の問題が発生する可能性があります。

于 2010-04-23T12:47:18.330 に答える
2

他の人が観察しているように、なぜあなたがしていることをしたいのかは明らかではありません。

次のコマンドに代わるものSUBSTRINGがあります。STUFF

SELECT stuff(cast([AuctionId] as varchar(36)),36,1,'1')

于 2010-04-23T12:54:47.547 に答える