web-dev-qa-db-fra.com

La conversion a échoué lors de la conversion d'une chaîne de caractères en identifiant unique

Création d'une procédure stockée dans SQL 9 (2005) et mise à niveau depuis vers SQL 10 (2008). Depuis lors, la procédure stockée suivante a cessé de fonctionner et a généré l'erreur ci-dessus:

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

Le paramètre passé @vPortalUID contient: 2A66057D-F4E5-4E2B-B2F1-38C51A96D385. J'exécute le proc stocké comme ceci:

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

Ça tombe. J'ai également essayé Convert. Toujours pas de joie. Ont également eu la valeur ajoutée avec {} autour d'elle. Je les ai supprimés par programme et manuellement comme ci-dessus.

Si vous êtes intéressé, j'exécute la page SP à partir d'une page ASP Classic, bien que cela ne devrait pas affecter cela car le code ci-dessus a été exécuté à l'aide de SSMS).

Merci d'avance pour votre aide. James

21
jamesmhaley

cela échoue:

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

cela marche

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

la différence est NVARCHAR(36), votre paramètre d'entrée est trop petit!

36
KM.