web-dev-qa-db-ja.com

文字列からuniqueidentifierへの変換時に変換が失敗しました

SQL 9(2005)でストアドプロシージャを作成し、その後SQL 10(2008)にアップグレードしました。それ以降、次のストアドプロシージャは動作を停止し、上記のエラーをスローしました。

ALTER PROCEDURE [dbo].[GetModifiedPages] 
    @vPortalUID         nvarchar(32) = ''
AS
BEGIN
    -- Convert GUID to UI
    DECLARE @nPortalUID AS uniqueidentifier
    SET @nPortalUID = CAST(@vPortalUID AS uniqueidentifier)

渡されたパラメータ@vPortalUIDには、2A66057D-F4E5-4E2B-B2F1-38C51A96D385が含まれます。次のようにストアドプロシージャを実行します。

EXEC GetModifiedPages '2A66057D-F4E5-4E2B-B2F1-38C51A96D385'

倒れます。 Convertも試してみました。まだ喜びはありません。また、{}を使用して値を入力しました。上記のようにこれらをプログラムと手動で削除しました。

興味がある場合は、SPからASP Classicページを実行していますが、上記のコードはSSMSを使用して実行されたため、これには影響しません。

よろしくお願いします。ジェームス

21
jamesmhaley

これは失敗します:

_ DECLARE @vPortalUID NVARCHAR(32)
 SET @vPortalUID='2A66057D-F4E5-4E2B-B2F1-38C51A96D385'
 DECLARE @nPortalUID AS UNIQUEIDENTIFIER
 SET @nPortalUID = CAST(@vPortalUID AS uniqueidentifier)
 PRINT @nPortalUID
_

これは動作します

_ DECLARE @vPortalUID NVARCHAR(36)
 SET @vPortalUID='2A66057D-F4E5-4E2B-B2F1-38C51A96D385'
 DECLARE @nPortalUID AS UNIQUEIDENTIFIER
 SET @nPortalUID = CAST(@vPortalUID AS UNIQUEIDENTIFIER)
 PRINT @nPortalUID
_

違いはNVARCHAR(36)で、入力パラメーターが小さすぎます!

36
KM.