当前位置:首页 » 编程语言 » sql获取自增长id
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql获取自增长id

发布时间: 2023-03-05 07:29:14

‘壹’ sql中,如何得到新增数据的id(主键自增)

存储过程返回 @@IDENTITY
就是新增数据ID

或者升级到SQL2005以后使用带有output的insert
into语句

INSERT INTO [表]([字段列表]) output inserted.id VALUES ('字段值')

‘贰’ SQL 程序如何获取自增表中的自增列的值

假设表结构如下:

CREATE TABLE TestTable

(

id int identity,

CreatedDate datetime

)

SQL2005获得新增行的自动增长列的语句如下:

insert into TestTable (CreatedDate) output inserted.id values (getdate())

output 是sql server2005的新特性,可以从数据修改语句中返回输出,可以看作是“返回结果的DML”

2005之后 Insert,Delete,Update语句 均支持Output语句。

在Output语句中可以引用inserted和deleted。使用方法同触发器类似。

该方法最大弊端就是需要指定主键。output Inserted.要返回的值。

带有output的insert语句.

@@identity只能返回当前会话最后生产的标识列. 如果一次性插入多条语句的话. 需要返回这些自动生产的标识列. 那么outpu就派上用场了.

declare @temp table(k int, v nvarchar(200))
insert into t1(datacol)
output inserted.keycol, inserted.datacol
into @temp
select lastname from TSQLFundamentals2008.hr.Employees where country='uk'

select * from @temp

带有output的delete语句和update语句也大同小异.

delete语句能操作deleted临时表. 而update的本质是delete和insert一次能操作inserted和updated两张表.

带有output的merge子句.

在merge子句的output输出中可以调用@action函数. 会返回一个代表相应操作的字符串(insert, update, delete)

SQL2000获得新增行的自动增长列的语句如下:

insert into TestTable (CreatedDate) values (getdate())

select @@IDENTITY

用select @@identity得到上一次插入记录时自动产生的ID

如果你使用存储过程的话,将非常简单,代码如下:SET @NewID=@@IDENTITY

@@identity使用注意事项:


我们要慎用@@IDENTITY,原因是 @@IDENTITY 它总是获取最后一条变更数据的自增字段的值,
而忽略了进行变更操作所在的范围约束。比如,我有表 A 和表 B 两个表,现在我在表 A 上定义了一个Insert触发器,当在表 A 中插入一条数据时,自动在表 B 也插入一条数据。此时,大家注意,有两个原子操作:在A中插入一条数据, 接着在B中随后插入一条数据。

现在我们想下,假设上面表 A 和表 B 都有IDENTITY自增域,那么我们在表 A 插入一条数据后,使用了 SELECT @@IDENTITY 输出时,输出的到底是 A 还是 B 的自增域的值呢? 答案很明显,是谁最后插入就输出谁,那么就是 B 了。于是,我本意是想得到 A 的自增域值,结果得到了 B 的自增域值,一只 BUG 随之诞生,搞不好还会影响到整个系统数据的混乱。

因此,对于这种情况,建议大家慎用 @@IDENTITY,而尽量采用SCOPE_IDENTITY()函数替换之。SCOPE_IDENTITY() 也是得到最后一条自增域的值,但是它是仅限在一个操作范围之内,而不@@IDENTITY 是取全局操作的最后一步操作所产生的自增域的值的。

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。

在C#中使用ExecuteScalar()方法获得第一行第一列的值(即自增id):

object val = cmd.ExecuteScalar();

‘叁’ sql server怎么获取自增的id值

SELECT SCOPE_IDENTITY() --返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。
SELECT @@IDENTITY --返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值
SELECT IDENT_CURRENT('TbName')--不受作用域和会话的限制,而受限于指定的表。

‘肆’ SQL Server中怎样设置id号自动增长

createtable表名--第一种用sql建表identity(1,1)为每次递增1位primarykey为主键
(
idintidentity(1,1)primarykey
)

--第二种用设计器来操作
--鼠标对准你需要操作的表名右击=>设计=>
选中你需要操作的列名然后在下方有一个列属性=>选择标识规范=>
将标识增量此选项选为(是)下面有一个标识种子默认为1(每次递增1,可修改)

‘伍’ 数据库如何设置主键(ID)自动增长啊(SQL语句)

在创建表的时候可以设置,方法如下,用一下sql语句。
createtabletableName(
idintidentity(1,1)primarykey,
datavarchar(50))

解释:其中identity(1,1)代表自增,第一个1代表从1开始计数,第二个1代表每次增长1。

(5)sql获取自增长id扩展阅读:

SQL全名是结构化查询语言[1](Structured Query Language),是用于数据库中的标准数据查询语言,IBM公司最早使用在其开发的数据库系统中。1986年10月,美国国家标准学会(ANSI) 对 SQL 进行规范后,以此作为关系式数据库管理系统的标准语言 (ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对 SQL 规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。

参考资料:

网络-SQL语言

‘陆’ 如何在sql中插入记录时返回id(id为自动增长)

insert into [table] values(null) select SCOPE_IDENTITY()
重点在插入后面的select

‘柒’ SQL查询,获取最后一行自增ID

插入后,用以下语句获得上一个自增列的ID。
SELECT @@IDENTITY;

‘捌’ Mysql数据库中,设置id为自动增加,向数据库中插入数据时,SQL语句怎么写

在建立表的时候设置id为自动增长的 [id] [int] IDENTITY (1, 1)

SQL语句是insert into user(name,passwd) values (name ,passwd)。新增一条数据 id 就会自动加1

INSERT INTO是sql数据库中的语句,可以用于向表格中插入新的行。

(8)sql获取自增长id扩展阅读

(1) 数据记录筛选:

sql="select * from 数据表 where字段名=字段值 order by字段名[desc]"(按某个字段值降序排列。默认升序ASC)

sql="select * from 数据表 where字段名like '%字段值%' order by 字段名 [desc]"

sql="select top 10 * from 数据表 where字段名=字段值 order by 字段名 [desc]"

sql="select top 10 * from 数据表 order by 字段名 [desc]"

sql="select * from 数据表 where字段名in ('值1','值2','值3')"

sql="select * from 数据表 where字段名between 值1 and 值2"

(2) 更新数据记录:

sql="update 数据表 set字段名=字段值 where 条件表达式"

sql="update 数据表 set 字段1=值1,字段2=值2 ?? 字段n=值n where 条件表达式"

(3) 删除数据记录:

sql="delete from 数据表 where 条件表达式"

sql="delete from 数据表" (将数据表所有记录删除)

(4) 添加数据记录:

sql="insert into 数据表 (字段1,字段2,字段3 ?) values (值1,值2,值3 ?)"

sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

(5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值

COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计

MAX(字段名) 取得一个表格栏最大的值

MIN(字段名) 取得一个表格栏最小的值

SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"

set rs=conn.excute(sql)

用 rs("别名") 获取统计的值,其它函数运用同上。

查询去除重复值:select distinct * from table1

(6) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) ?? )

(7) 单列求和:

SELECT SUM(字段名) FROM 数据表