2009-09-25 5 views
20

Utworzono procedurę składowaną w SQL 9 (2005) i zaktualizowano ją do wersji SQL 10 (2008). Od tego czasu jest następująca procedura przechowywana przestał działać i rzucony w górę powyższy błąd:Konwersja nie powiodła się podczas konwersji z ciągu znaków na uniqueidentifier.

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

Przekazany w param @vPortalUID zawiera: 2A66057D-F4E5-4E2B-B2F1-38C51A96D385. Wykonuję zapisany proces w ten sposób:

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

To przewraca się. Próbowałem również Convert. Wciąż nie ma radości. Mieli również wartość z {} wokół niej. Usunąłem te programowo i ręcznie, jak powyżej.

Jeśli jesteś zainteresowany, uruchomię SP ze strony ASP Classic, chociaż nie powinno to wpłynąć na to, ponieważ powyższy kod został uruchomiony przy użyciu SSMS.

Z góry dziękuję za pomoc. James

Odpowiedz

31

to się nie powiedzie:

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

to działa

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

różnica jest NVARCHAR(36) Twój parametr wejściowy jest zbyt mała!

+3

+1 dla punktu, w którym jego parametr jest zbyt mały, ale należy zauważyć, że z tego powodu jego ciąg jest faktycznie obcięty. Jeśli zrobiłeś 'print vPortalUID' przed konwersją, zobaczysz, że' D385' nie dokonało cięcia. – Eric

+0

Dziękuję! Świetna robota! Teraz, aby zmienić 20 SP! ;) – jamesmhaley

+0

Nie wiem, dlaczego to robiłem http://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server: p. Powinienem najpierw rzucić varchar + Oczywiście 1! – Zerotoinfinity