错误:将SQL表ID转换为GUID时,int与uniqueidentifier不兼容

时间:2014-03-03 21:52:29

标签: sql sql-server-2008 stored-procedures guid

我正在将表ID从int转换为UNIQUEIDENTIFIER。我曾经使用以下方法检查有效用户:

CREATE PROCEDURE [dbo].[UCP_ValidateUser]
   @UserName nvarchar(32),
   @isUser int Output
AS
Begin
   SELECT  
       @isUser = UserID  
   FROM 
       UCP_Users
   WHERE 
       UserName = @UserName

   IF @@RowCount < 1
      SELECT @isUser = 0
End
GO

但我收到错误

  

int与uniqueidentifier

不兼容

现在尝试转换为:

CREATE PROCEDURE [dbo].[UCP_ValidateUser]
   @UserName nvarchar(32),
   @isUser UNIQUEIDENTIFIER Output
AS
Begin
   SELECT  
      @isUser = UserID  
   FROM 
      UCP_Users
   WHERE 
      UserName = @UserName

   if @@RowCount < 1
      SELECT @isUser = 0
End
GO

并且由于值0

仍然出现错误

我在我的ASP.NET代码中使用它如下:

If isUser > 0 Then
    Return True
Else
    Return False
End If

我的问题是:

  1. 如何让此存储过程正常工作?

  2. 我应该保留还是更好地保留通常的表身份ID,并为具有唯一标识符的GUID添加另一个?

2 个答案:

答案 0 :(得分:2)

使用空GUID而不是零:

SELECT  @isUser = '00000000-0000-0000-0000-000000000000'

在ASP.NET代码中,您将值与空GUID值进行比较:

If isUser <> GUID.Empty Then

答案 1 :(得分:1)

问题是当您尝试分配@isUser = 0时,uniqueidentifier不能设置为Zero,  但你可以这样做......

CREATE PROCEDURE [dbo].[UCP_ValidateUser]
@UserName nvarchar(32),
@isUser UNIQUEIDENTIFIER Output
AS
Begin
 SET NOCOUNT ON;

SELECT TOP 1 @isUser = UserID  
From UCP_Users
Where UserName=@UserName

if (@@RowCount <> 1)
 BEGIN
   SET @isUser = NULL
 END

End
GO

一旦为@isUser变量分配了NULL值,就可以进一步检查并填充变量或返回值。做类似......

IF ( @isUser IS NULL)
 BEGIN
   /* Do something here */
 END
ELSE
 BEGIN
  /* Else do something */
 END