如何在SQL Server中生成和手动插入唯一标识符?

33

我正在尝试在我的表中手动创建新用户,但发现很难生成“UniqueIdentifier”类型而不抛出异常...

这是我的示例:

DECLARE @id uniqueidentifier
SET @id = NEWID()

INSERT INTO [dbo].[aspnet_Users]
           ([ApplicationId]
           ,[UserId]
           ,[UserName]
           ,[LoweredUserName]
           ,[LastName]
           ,[FirstName]
           ,[IsAnonymous]
           ,[LastActivityDate]
           ,[Culture])
     VALUES
           ('ARMS'
           ,@id
           ,'Admin'
           ,'admin'
           ,'lastname'
           ,'firstname'
           ,0
           ,'2013-01-01 00:00:00'
           ,'en')
GO

抛出此异常 -> Msg 8169,级别 16,状态 2,行 4 无法将字符字符串转换为唯一标识符。

我正在使用 NEWID() 方法,但它不起作用...

http://www.dailycoding.com/Posts/generate_new_guid_uniqueidentifier_in_sql_server.aspx


1
那应该可以正常工作- http://sqlfiddle.com/#!6/699d6/1 - Nenad Zivkovic
1
你的表中 UserID 列是什么类型?你确定插入字符串的不是其他列,比如 UniqueIdentifier 类型的 ApplicationID 列吗? - Nenad Zivkovic
3
可能是因为另一列出现了错误,我猜想是ApplicationID这一列,那么ApplicationID的数据类型是什么? - Vishal Gajjar
它具有“uniqueidentifier”类型,但我读到应该使用NewGuid()来生成“uniqueidentifier”类型。这是错误的吗? - Mehdi Bugnard
你上面的代码完全没问题。错误实际上出现在另一个字段上。所以,请再次检查每个字段的数据类型。我猜想,你可能在ID列以外的其他地方使用了UniqueIdentifier。 - user2290627
显示剩余4条评论
3个回答

46

ApplicationId必须是UniqueIdentifier类型。如果您进行以下操作,则代码将正常工作:

DECLARE @TTEST TABLE
(
  TEST UNIQUEIDENTIFIER
)

DECLARE @UNIQUEX UNIQUEIDENTIFIER
SET @UNIQUEX = NEWID();

INSERT INTO @TTEST
(TEST)
VALUES
(@UNIQUEX);

SELECT * FROM @TTEST
因此,我会说可以安全地假定ApplicationId不是正确的数据类型。

4

请检查 aspnet_Users 表中的 ApplicationId 数据类型,ApplicationId 列的数据类型应为唯一标识符。

*您的参数顺序传递错误, 参数 @id 应作为第一个参数传递,但在您的脚本中将其放置在第二个参数中。.*

因此会引发错误。

请参考示例脚本:

DECLARE @id uniqueidentifier
SET @id = NEWID()
Create Table #temp1(AppId uniqueidentifier)

insert into #temp1 values(@id)

Select * from #temp1

Drop Table #temp1

0

请检查您的列数据类型是否为唯一标识符,并确保在插入值时使用正确的顺序

INSERT INTO [dbo].[aspnet_Users]
([ApplicationId],[UserId],[UserName],[LoweredUserName],[LastName]
,[FirstName],[IsAnonymous],[LastActivityDate],[Culture])
VALUES ('ARMS',NEWID(),'Admin','admin','lastname','firstname,0
,'2013-01-01 00:00:00','en')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接