2023年11月26日发(作者:)

解决sqlserver保存对象字符串转换成uniqueidentifier失败

的问题

⼀、 背景介绍

web应⽤采⽤的是ssh框架,数据库使⽤的sql server2014版本。

⼆、问题:

客户要求,ID列的数据类型必须是uniqueidentifier,⼀开始实体类的ID设计成类型;映射⽂件中ID的增长⽅式

private id;

public getId(){

return id;

}

public void setId( id){

=id;

}

在执⾏保存时报错:将字符串uniqueidentifier 时失败。

三、解决⽅案:

将映射⽂件中ID的增长⽅式修改为“assigned”,在程序中赋值。

/*映射⽂件*/

/*赋值代码*/

UUID uuid = UUID();

(ng);

(object);

附:创建表的语句

CREATE TABLE tableName

(

ID UNIQUEIDENTIFIER,

--省略其他代码

);

补充知识:SQLServeruniqueidentifier数据类型理解

uniqueidentifier可以理解为全局唯⼀标⽰符(GUID),可以使⽤newid函数初始化值,将字符串常量转换为如下形式(xxxxxxxx-

xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每个 x 0-9 a-f 范围内的⼀个⼗六进制的数字)。

例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 uniqueidentifier 值。

⽐较运算符可与 uniqueidentifier 值⼀起使⽤。然⽽,排列并⾮通过⽐较两个值的位模式来实现。允许对 uniqueidentifier 值执

⾏的操作只有⽐较 (=, <>, <, >, <=, >=) 和检查 NULLIS NULL IS NOT NULL)。

不允许使⽤其它算术运算符。所有的列约束及属性(IDENTITY 除外)均允许⽤于 uniqueidentifier 数据类型。

declare @myid uniqueidentifier

set @myid=newid()

print 'Value of @myid is '+cast(@myid as varchar(255))

每次运⾏以上程序返回不同的uniqueidentifier

uniqueidentifier 数据类型不象IDENTITY 属性那样为新插⼊的⾏⾃动⽣成新的ID

为了得到新的 uniqueidentifier 值,表必须具有⼀个指定 NEWID 函数的 DEFAULT ⼦句,或使⽤ NEWID 函数的 INSERT

句:

CREATE TABLE MyUniqueTable

(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),

Characters VARCHAR(10) )

GO

INSERT INTO MyUniqueTable(Characters) VALUES ('abc')

INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')

GO

以上这篇解决sql server保存对象字符串转换成uniqueidentifier失败的问题就是⼩编分享给⼤家的全部内容了,希望能给⼤家

⼀个参考,也希望⼤家多多⽀持。