从字符串转换为uniqueidentifier时转换失败

jam*_*ley 21 sql asp-classic sql-server-2008

在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)
Run Code Online (Sandbox Code Playgroud)

传入的参数@vPortalUID包含:2A66057D-F4E5-4E2B-B2F1-38C51A96D385.我像这样执行存储过程:

EXEC GetModifiedPages '2A66057D-F4E5-4E2B-B2F1-38C51A96D385'
Run Code Online (Sandbox Code Playgroud)

它倒下了.我试过转换aswell.仍然没有快乐.周围也有{}的价值.我按照上面的程序和手动删除了这些.

如果您感兴趣我正在从ASP Classic页面运行SP,尽管这不应该影响这一点,因为上面的代码是使用SSMS运行的.

在此先感谢您的帮助.詹姆士

KM.*_*KM. 36

这失败了:

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

这很有效

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

不同的是NVARCHAR(36),你的输入参数太小了!

  • +1表示他的参数太小,但应该注意到,因此,他的字符串实际上被截断了.如果你在转换之前做了'print vPortalUID`,你会看到`D385`没有进行切换. (3认同)