2009-09-25 6 views
20

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) 

은 PARAM의 @vPortalUID 전달이 포함 된 : 2A66057D-F4E5-4E2B-B2F1-38C51A96D385. 다음과 같이 저장된 proc을 실행합니다 :

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

넘어집니다. 나는 Convert Aswell을 시도했다. 아직도 기쁨이 없습니다. 그 주위에 {}을 (를) 사용하여 가치를 부여했습니다. 위와 같이 프로그래밍 방식으로 수동으로 제거했습니다.

관심이 있으시면 위의 코드가 SSMS를 사용하여 실행되었으므로 ASP 기본 페이지에서 SP를 실행하고 있습니다.

미리 도움을 주셔서 감사합니다. 제임스

답변

31

이 실패

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

이 차이가 NVARCHAR(36)입니다

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

작동, 사용자의 입력 매개 변수가 너무 작습니다!

+3

+1 그의 매개 변수가 너무 작다는 점에 대해 +1하지만, 그 때문에 그의 문자열은 실제로 잘 렸습니다. 변환하기 전에'print vPortalUID'를했다면'D385'가 잘리지 않는다는 것을 알 수 있습니다. – Eric

+0

고맙습니다! 훌륭한 일! 이제 20 SP를 변경하십시오! ;) – jamesmhaley

+0

내가 왜 그 일을하는지 모르겠다 http://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server : p .. 나는 먼저 varchar + 물론 1 개! – Zerotoinfinity

관련 문제