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,
--省略其他代码
);
补充知识:SQLServer中uniqueidentifier数据类型理解
uniqueidentifier可以理解为全局唯⼀标⽰符(GUID),可以使⽤newid函数初始化值,将字符串常量转换为如下形式(xxxxxxxx-
xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每个 x 是 0-9 或 a-f 范围内的⼀个⼗六进制的数字)。
例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 uniqueidentifier 值。
⽐较运算符可与 uniqueidentifier 值⼀起使⽤。然⽽,排列并⾮通过⽐较两个值的位模式来实现。允许对 uniqueidentifier 值执
⾏的操作只有⽐较 (=, <>, <, >, <=, >=) 和检查 NULL(IS 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失败的问题就是⼩编分享给⼤家的全部内容了,希望能给⼤家
⼀个参考,也希望⼤家多多⽀持。


发布评论