2009-09-25 97 views
20

在SQL 9(2005)中创建了一个存储过程,并已升级到SQL 10(2008)。从那时起,以下存储过程已停止工作,并抛出了上述错误:从字符串转换为uniqueidentifier时转换失败

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' 

它倒下了。我已经尝试过转换。仍然没有快乐。周围也有{{}}的价值。我按照上面的步骤手动删除了这些文件。

如果您有兴趣,我正在从ASP经典页面运行SP,但这应该不会影响到这一点,因为上面的代码是使用SSMS运行的。

在此先感谢您的帮助。 詹姆斯

回答

31

失败:

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),您输入的参数是太小了!

+3

+1因为他的参数太小,但应该指出的是,因为这个原因,他的字符串实际上被截断了。如果您在转换之前执行了“打印vPortalUID”,您会发现'D385'没有完成切割。 – Eric 2009-09-25 12:11:56

+0

谢谢!做得好!现在改变20 SP! ;) – jamesmhaley 2009-09-25 13:49:00

+0

我不知道我为什么要这样做http://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server:p ..我应该先把varchar +当然是1! – Zerotoinfinity 2013-07-12 13:12:55

相关问题