2011-10-25 79 views
1

遇到问题与SQL Server 2008存储过程:我不断收到以下错误。SQL Server 2008 - “从字符串转换为uniqueidentifier时转换失败。”错误

将字符串转换为 uniqueidentifier时转换失败。

这里的存储过程 - 我已经斩了很多出来用于测试

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 

我尝试用标准的管理工作室“执行”菜单选项,这给了我这个调用此:

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 - 总是出现同样的问题。有任何想法吗?这让我疯狂!

+0

看到这个所以答案​​http://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server/1390129#1390129 – sll

+1

这不是一个骗局。链接的问题和答案是关于将不带破折号的字符串(如“a89b1acd95016ae6b9c8aabb07da2010”)转换为“uniqueidentifier” –

回答

5

您的代码具有此行

SET @ReviewKey = 'NotFound' 

然后尝试和铸造的字符串uniqueidentifier。如果你删除该行,它的工作原理!

2

SET @ReviewKey = 'NotFound' 

然后尝试

SET @Temp = CONVERT(UNIQUEIDENTIFIER, @ReviewKey) 

这不会工作作为 'NOTFOUND' 不是一个GUID

0

除非我的眼球都在欺骗我,你的问题是在这line:

SET @ReviewKey = 'NotFound' 

字符串'NotFound'无法转换为GUID。它看起来像你的proc覆盖任何值与'NotFound'传入。

相关问题