我正在将表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
我的问题是:
如何让此存储过程正常工作?
我应该保留还是更好地保留通常的表身份ID,并为具有唯一标识符的GUID添加另一个?
答案 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