从字符串转换为唯一标识符时转换失败 [英] Conversion failed when converting from a character string to uniqueidentifier
问题描述
在 SQL 9 (2005) 中创建了一个存储过程,并已升级到 SQL 10 (2008).此后,以下存储过程停止工作并抛出上述错误:
Created a stored procedure in SQL 9 (2005) and have since upgraded to SQL 10 (2008). Since then, the following stored procedure has stopped working and thrown up the above error:
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.我像这样执行存储过程:
The passed in param @vPortalUID contains: 2A66057D-F4E5-4E2B-B2F1-38C51A96D385. I execute the stored proc like this:
EXEC GetModifiedPages '2A66057D-F4E5-4E2B-B2F1-38C51A96D385'
它倒下了.我也尝试过转换.仍然没有喜悦.周围也有 { } 的价值.如上所述,我以编程方式和手动方式删除了这些内容.
It falls over. I have tried Convert aswell. Still no joy. Have also had the value going in with { } around it. I removed these programatically and manually as above.
如果您有兴趣,我正在从 ASP 经典页面运行 SP,尽管这不会影响这一点,因为上面的代码是使用 SSMS 运行的.
If you are interested I am running the SP from an ASP Classic page, although that should not affect this as the above code was run using SSMS.
提前感谢您的帮助.詹姆斯
Thanks in advance for your help. James
推荐答案
失败:
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)
,你的输入参数太小了!
the difference is NVARCHAR(36)
, your input parameter is too small!
这篇关于从字符串转换为唯一标识符时转换失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!