‘壹’ 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 数据表