sql 获取当前插入的主键 表主键是guid类型的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 获取当前插入的主键 表主键是guid类型的相关的知识,希望对你有一定的参考价值。

记得用int 做id时 使用select @@IDENTITY和 select SCOPE_IDENTI就可以

如果主键是Guid,数据库给主键列以newid()的默认值,EF也会将主键值返回并更新模型的对应属性的,前提是要在EF中Mapping类中要设置
this.Property(t => t.TipID).HasDatabaseGeneratedOptio(DatabaseGeneratedOption.Identity);
此时生成的SQL语句和自增长的有所不同
exec sp_executesql N'declare @generated_keys table([TipID] uniqueidentifier)
insert [dbo].[Tips]([Description])
output inserted.[TipID] into @generated_keys
values (@0)
select t.[TipID]
from @generated_keys as g join [dbo].[Tips] as t on g.[TipID] = t.[TipID]
where @@ROWCOUNT > 0',N'@0 nvarchar(max) ',@0=N'testing'

注意:这里定义了一个表变量@generated_keys,插入的时候将id输出给@generated_keys表的字段,
这里values (@0)是针对insert [dbo].[Tips]([Description]) 而言的,先执行insert
再执行output inserted.[TipID] into @generated_keys 将插入的id输出到@generated_keys 中

EF真的是太强大了,可以模仿EF生成SQL语句,这极大地提升本人写SQL的水平,Entity Framework生成的SQL是很有水平的!
这样就可以返回刚新插入的主键值!
参考技术A @@IDENTITY只能获取表中identity类型的值,guid的好像只能写方法或者触发器自己获得了
另外guid虽可唯一标示,但是并不顺序增长,所以拿来做主键可以,但是做聚集索引就没什么意义了,最后自己再加一列identity型的唯一列来标示追问

除了写方法和触发器 没别的好办法了么 ?

追答

或者你再多加一列identity,别的真没什么好办法了

本回答被提问者和网友采纳
参考技术B @parent_id=null
set @parent_id=newID()
insert.....
select @parent_id as 'id'追问

set @parent_id=newID()

你这不是从新生成了一次ID吗 我的意思是在我insert 之后取 insert刚刚生成的ID

Java注解配置数据库表主键

 

数字类型 Integer

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)

 

 运行后就Hibernate生成表的主键类型就是Integer类型

 

 -----------------------------------------------------------------------------------------------------------------------------------------------

 -----------------------------------------------------------------------------------------------------------------------------------------------

 -----------------------------------------------------------------------------------------------------------------------------------------------

 除了可以配置一个GenerationType.IDENTITY外,还有一个 .AUTO,这个所有数据库通用的

但是会有一个Sequence序列表,作用不大,Sequence是Oracle数据库里的,但Oracle里的Sequence不是一个表,是一个对象

@Id
@GeneratedValue(strategy=GenerationType.AUTO)

 

 

字符串类型  String

UUID,{唯一标识,全世界唯一}

@Id
@GeneratedValue(generator="systemUUID")
@GenericGenerator(name="systemUUID",strategy="uuid")

 

 

新增数据的时候主键字段值就是就是一串字符串,

根据录入信息时的时间和所用到的设备的设备信息等等组合起来的数据,所以称全世界唯一标识

 

 

 数字类型之Oracle_Sequence

 

以上是关于sql 获取当前插入的主键 表主键是guid类型的的主要内容,如果未能解决你的问题,请参考以下文章

SQL 外键名称问题

SQL 一个表只有一个自增的主键字段,如何插入

在 SQL Server CE 和 C# 中获取新插入行的主键?

sQL数据库表的主键列设为标识,增量为1,下次插入数据时能不插入主键列吗

oracle怎么查询所有的表有没有主键

关于oracle中 根据一个表的主键数据同步更新另一个关联表的字段。