sql 获取当前插入的主键 表主键是guid类型的
发布网友
发布时间:2022-04-08 01:27
我来回答
共3个回答
热心网友
时间:2022-04-08 02:56
如果主键是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是很有水平的!
这样就可以返回刚新插入的主键值!
热心网友
时间:2022-04-08 04:14
@@IDENTITY只能获取表中identity类型的值,guid的好像只能写方法或者触发器自己获得了
另外guid虽可唯一标示,但是并不顺序增长,所以拿来做主键可以,但是做聚集索引就没什么意义了,最后自己再加一列identity型的唯一列来标示追问除了写方法和触发器 没别的好办法了么 ?
追答或者你再多加一列identity,别的真没什么好办法了
热心网友
时间:2022-04-08 05:49
@parent_id=null
set @parent_id=newID()
insert.....
select @parent_id as 'id'追问set @parent_id=newID()
你这不是从新生成了一次ID吗 我的意思是在我insert 之后取 insert刚刚生成的ID