insert into操作,获取主键返回值

mszjk 2011-04-27 04:00:34
有一个表:
表名为OrgInfo
OrgId 主键,定义为自动产生
OrgName

现在要添加一个进去(比如OrgName = OOXX),并且获得自动产生的OrgId值,求SQLServer语句~

小弟白菜数据库~麻烦具体点具体点.
或者把下面语句
SQLServer:

INSERT INTO tableName (fieldList ...) values (valueList ...) SELECT @@IDENTITY AS aliasName;
解释成个例子也行..

谢谢谢谢
...全文
1655 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
michaelgong 2011-04-27
  • 打赏
  • 举报
回复

insert into OrgInfo values('OOXX')select @@identity
advisd 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 mszjk 的回复:]
有一个表:
表名为OrgInfo
OrgId 主键,定义为自动产生
OrgName

现在要添加一个进去(比如OrgName = OOXX),并且获得自动产生的OrgId值,求SQLServer语句~

小弟白菜数据库~麻烦具体点具体点.
或者把下面语句
SQLServer:

INSERT INTO tableName (fieldList ...) values (……
[/Quote]
Insert into [表名](要插入表的列的列名,要插入那些列自己决定,例如你的表有3列,你要插入2列。有一列不插入。则写要插入的2列的列名) values(要插入的值,必须与前面括号里面的个数一样。要一一对应。如果有默认值的,你要取默认值,可以为DEFAULT) 确认,如果是自动生成的标识列不用写进去。
后面加select @@indentity表示。你要返回刚刚插入数据的“自动生成的标识列”的值。

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[OrgInfo]') AND type in (N'U'))
DROP TABLE OrgInfo

CREATE TABLE [dbo].[OrgInfo](
[OrgId] [int] IDENTITY(1,1) NOT NULL,
[OrgName] [varchar](50) Not NULL,
)
SELECT * FROM OrgInfo
INSERT INTO OrgInfo(OrgName) VALUES ('OOXX') SELECT @@IDENTITY
SELECT * FROM OrgInfo


mszjk 2011-04-27
  • 打赏
  • 举报
回复
3Q 回复JJ太短了!
Shawn 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mszjk 的回复:]
引用 2 楼 ssp2009 的回复:
SQL code
insert into OrgInfo
select newid(),'ooxx'


insert into OrgInfo values('ooxx')

然后数据库就产生了一条表单
1 ooxx

1这个值是系统生成的,我想获得这个值...
[/Quote]
获取这个值有三个方法:
SELECT @@IDENTITY --返回为当前会话的所有作用域中的任何表最后生成的标识值
SELECT SCOPE_IDENTITY() --返回为当前会话和当前作用域中的任何表最后生成的标识值
--@@IDENTITY和SCOPE_IDENTITY()的区别在于作用域的不同
SELECT IDENT_CURRENT('#temp') --返回为任何会话和作用域中的特定表所生成的值
用SCOPE_IDENTITY()应该最准确达到你的目的
kingtiy 2011-04-27
  • 打赏
  • 举报
回复
DECLARE @t TABLE (id int)
INSERT INTO tableName (fieldList ...)
OUTPUT INSERTED.id INTO @t
values (valueList ...)
SELECT * FROM @t
zshsuming 2011-04-27
  • 打赏
  • 举报
回复
select @@indentity
kingtiy 2011-04-27
  • 打赏
  • 举报
回复
INSERT INTO tableName (fieldList ...) values (valueList ...) select inserted.OrgId 
mszjk 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ssp2009 的回复:]
SQL code
insert into OrgInfo
select newid(),'ooxx'
[/Quote]

insert into OrgInfo values('ooxx')

然后数据库就产生了一条表单
1 ooxx

1这个值是系统生成的,我想获得这个值...
Shawn 2011-04-27
  • 打赏
  • 举报
回复
INSERT INTO tableName(OrgName) 
values('OOXX')
SELECT SCOPE_IDENTITY() AS aliasName --用SCOPE_IDENTITY(),返回当前作用域的所有表的identity值.最准确
快溜 2011-04-27
  • 打赏
  • 举报
回复
函数体可以自己定义,newid(),或者取时间戳生成字符串,这个随你。
叶子 2011-04-27
  • 打赏
  • 举报
回复

--创建表
create table OrgInfo
(
OrgId int identity(1,1) primary key,
OrgName nvarchar(20)
)
--插入测试数据
insert into OrgInfo
select '张三' union select '李四' union select '王五'

select * from OrgInfo
/*
OrgId OrgName
----------- --------------------
1 李四
2 王五
3 张三
*/

--假设此时我们再插入一条,然后得到新插入的id
insert into OrgInfo select '刘六'
--得到新插入的id
select @@identity
/*
4
*/

--得到新插入的数据行
select * from OrgInfo where OrgId=@@identity
/*
OrgId OrgName
----------- --------------------
4 刘六
*/
快溜 2011-04-27
  • 打赏
  • 举报
回复
你可以自己写一个自动产生编号的函数,取时间戳,插入的时候调用函数,数据库表都统一调用函数,不会重复

insert into OrgInfo
select dbo.yourfunction(),'ooxx'
yubofighting 2011-04-27
  • 打赏
  • 举报
回复

select @@indentity
快溜 2011-04-27
  • 打赏
  • 举报
回复
insert into OrgInfo
select newid(),'ooxx'
mszjk 2011-04-27
  • 打赏
  • 举报
回复
杀花,分不够可以另开贴+~

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧