【问题标题】:SQL Server 2008 - "Conversion failed when converting from a character string to uniqueidentifier." errorSQL Server 2008 - “从字符串转换为唯一标识符时转换失败。”错误
【发布时间】:2011-12-15 02:07:02
【问题描述】:

SQL Server 2008 存储过程遇到问题:我不断收到以下错误。

从字符串转换为转换失败 唯一标识符。

这是存储过程 - 我已经切掉了很多用于测试

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE RateReview
 @ProfileKey                INT
,@ReviewKey                 NVARCHAR(36)
,@Rating                    BIT
,@Result                    NVARCHAR(16) OUTPUT
AS
BEGIN
SET NOCOUNT ON;

SET @ReviewKey = 'NotFound'

DECLARE @ReviewID           INT = 0
DECLARE @VisitorProfileID   INT = 0
DECLARE @ReviewRatingID     INT = 0
DECLARE @VotedUp            BIT = 0

DECLARE @Temp UNIQUEIDENTIFIER
SET @Temp = CONVERT(UNIQUEIDENTIFIER, @ReviewKey)

-- Commented code here

END
GO

我尝试使用标准的 Management Studio“执行”菜单选项来调用它,它给了我这个:

DECLARE @return_value int,
    @Result nvarchar(16)

EXEC    @return_value = [dbo].[maxi_content_RateReview]
    @ProfileKey = 1985118925,
    @ReviewKey = N'4D051C99-1D59-4BB0-BFB9-D26786B5C809',
    @Rating = 1,
    @Result = @Result OUTPUT

SELECT  @Result as N'@Result'

SELECT  'Return Value' = @return_value

GO

我检查了 GUID 是否正确,并尝试使用 CAST 和 CONVERT - 总是同样的问题。有任何想法吗?快把我逼疯了!

【问题讨论】:

  • 这不是骗子。链接的问题和答案是关于将不带破折号的字符串(例如a89b1acd95016ae6b9c8aabb07da2010)转换为uniqueidentifier

标签: sql-server stored-procedures


【解决方案1】:

你的代码有这一行

SET @ReviewKey = 'NotFound'

然后您尝试将该字符串转换为uniqueidentifier。如果您删除该行,它会起作用!

【讨论】:

    【解决方案2】:

    SET @ReviewKey = 'NotFound'
    

    那就试试吧

    SET @Temp = CONVERT(UNIQUEIDENTIFIER, @ReviewKey)
    

    因为 'NotFound' 不是 GUID,所以这不起作用

    【讨论】:

      【解决方案3】:

      除非我的眼球在欺骗我,否则你的问题就在这一行:

      SET @ReviewKey = 'NotFound'
      

      字符串 'NotFound' 无法转换为 GUID。看起来您的 proc 正在覆盖使用“NotFound”传入的任何值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-21
        • 2013-02-12
        • 1970-01-01
        • 1970-01-01
        • 2013-11-11
        • 2013-10-19
        • 1970-01-01
        相关资源
        最近更新 更多