sqlserver的id,sqlserver
SQLserver id直接的算法
---算法:记录个位数2的数据之间的间距 create by youhaoxinqin 2014-7-8 10:50 update by youhaoxinqin 2014-7-8 13:44
创新互联专注于网站设计制作、成都网站制作、网页设计、网站制作、网站开发。公司秉持“客户至上,用心服务”的宗旨,从客户的利益和观点出发,让客户在网络营销中找到自己的驻足之地。尊重和关怀每一位客户,用严谨的态度对待客户,用专业的服务创造价值,成为客户值得信赖的朋友,为客户解除后顾之忧。
create table demo(
SSCID int identity(1,1),
SSCISSUE nvarchar(200),
SSCNO int
)
--初始数据
insert into demo(SSCISSUE,SSCNO) values('270070401-001',36642)
insert into demo(SSCISSUE,SSCNO) values('270070401-002',12738)
insert into demo(SSCISSUE,SSCNO) values('270070401-003',93873)
insert into demo(SSCISSUE,SSCNO) values('270070401-004',32579)
insert into demo(SSCISSUE,SSCNO) values('270070401-005',93914)
insert into demo(SSCISSUE,SSCNO) values('270070401-006',82309)
insert into demo(SSCISSUE,SSCNO) values('270070401-007',58517)
insert into demo(SSCISSUE,SSCNO) values('270070401-008',98172)
insert into demo(SSCISSUE,SSCNO) values('270070401-009',90320)
insert into demo(SSCISSUE,SSCNO) values('270070401-010',35304)
insert into demo(SSCISSUE,SSCNO) values('270070401-011',96748)
insert into demo(SSCISSUE,SSCNO) values('270070401-012',30941)
insert into demo(SSCISSUE,SSCNO) values('270070401-013',36642)
insert into demo(SSCISSUE,SSCNO) values('270070401-014',12738)
insert into demo(SSCISSUE,SSCNO) values('270070401-015',93872)
insert into demo(SSCISSUE,SSCNO) values('270070401-017',32579)
insert into demo(SSCISSUE,SSCNO) values('270070401-018',93912)
insert into demo(SSCISSUE,SSCNO) values('270070401-019',82302)
insert into demo(SSCISSUE,SSCNO) values('270070401-020',58522)
insert into demo(SSCISSUE,SSCNO) values('270070401-021',98172)
insert into demo(SSCISSUE,SSCNO) values('270070401-022',90320)
insert into demo(SSCISSUE,SSCNO) values('270070401-023',35304)
insert into demo(SSCISSUE,SSCNO) values('270070401-024',96748)
insert into demo(SSCISSUE,SSCNO) values('270070401-025',30922)
--检索数据
select * from demo where SSCNO like'%2'
--创建全局临时表
create table ##remmber_id_no(
remmberkey int identity(1,1),
id int ,
no int
)
--创建全局临时表
create table ##remmber_id_no2(
remmberkey int identity(1,1),
id int ,
no int
)
--创建偏移数据
insert into ##remmber_id_no2(id,no) values(0,0)
--将算法数据存入两个全局临时表
declare demo_cursor cursor for select sscid,sscno from demo
go
open demo_cursor
declare @id int
declare @no int
declare @count int
set @count=0
fetch next from demo_cursor into @id,@no
while @@FETCH_STATUS=0
begin
select @count=COUNT(*) from demo where SSCID=@id and SSCNO like'%2'
if(@count0)
begin
insert into ##remmber_id_no(id,no) values(@id,@no)
insert into ##remmber_id_no2(id,no) values(@id,@no)
end
fetch next from demo_cursor into @id,@no
end
close demo_cursor
deallocate demo_cursor
--得出id距离
select (t.id-t2.id) as ID距离 from
(select * from ##remmber_id_no where remmberkey not in(select top 1 remmberkey from ##remmber_id_no )) as t,
(select * from ##remmber_id_no2 where remmberkey not in(select top 1 remmberkey from ##remmber_id_no2 )) as t2
where t.remmberkey=t2.remmberkey
drop table ##remmber_id_no
drop table ##remmber_id_no2
SQLServer 如何获取刚插入数据的Id号[转]
第一种方法: insert into table1 values(colvalue1,colvalue2)select ident_current('table1') 第二种方法: insert into table1 values(colvalue1,colvalue2) select @@identity 主要应用Transact-SQL中的函数1、IDENT_CURRENT() 2、SQL Server 2000 标识函数 SCOPE_IDENTITY ()3、SQL Server 2000 标识函数 @@IDENTITY IDENT_CURRENT() 返回为某个会话和作用域中指定的表或视图生成的最新的标识值。语法 IDENT_CURRENT( 'table_name' ) 备注IDENT_CURRENT 类似于 SQL Server 2000 标识函数 SCOPE_IDENTITY 和 @@IDENTITY。这三个函数都返回最后生成的标识值。但是,上述每个函数中定义的“最后”的作用域和会话有所不同。IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。 @@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。 SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。 在空表中调用 IDENT_CURRENT 函数时,此函数将返回 NULL。 如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务,也永远无法回滚标识值。例如,如果因 IGNORE_DUP_KEY 冲突而导致 INSERT 语句失败,表的当前标识值仍然会增加。参数 table_name 其标识值被返回的表的名称。table_name 的数据类型为 varchar,无默认值。返回类型sql_variant示例以下示例将显示由 IDENT_CURRENT、@@IDENTITY 和SCOPE_IDENTITY 返回的不同标识值。 USE AdventureWorks; GO DROP TABLE t6; DROP TABLE t7; GO CREATE TABLE t6(id int IDENTITY); CREATE TABLE t7(id int IDENTITY(100,1)); GO CREATE TRIGGER t6ins ON t6 FOR INSERT AS BEGIN INSERT t7 DEFAULT VALUES END; GO --End of trigger definition SELECT * FROM t6; --id is empty. SELECT * FROM t7; --ID is empty. --Do the following in Session 1 INSERT t6 DEFAULT VALUES; SELECT @@IDENTITY; SELECT SCOPE_IDENTITY(); SELECT IDENT_CURRENT('t7'); SELECT IDENT_CURRENT('t6'); -- Do the following in Session 2. SELECT @@IDENTITY; SELECT SCOPE_IDENTITY(); SELECT IDENT_CURRENT('t7'); SCOPE_IDENTITY () 返回插入到同一作用域中的标识列内的最后一个标识值。一个范围是一个模块:存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。语法 SCOPE_IDENTITY() 备注SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 是相似的函数,因为它们都返回插入到标识列中的值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关详细信息,请参阅 IDENT_CURRENT (Transact-SQL)。SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。例如,有两个表 T1 和 T2,并且在 T1 上定义了 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。 该方案演示了两个作用域:在 T1 上的插入,以及在 T2 通过触发器的插入。假设T1 和 T2 都有标识列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。@@IDENTITY 将返回在当前会话中的任何作用域内插入的最后一个标识列的值。这是在 T2 中插入的值。SCOPE_IDENTITY() 将返回在 T1 中插入的 IDENTITY 值。这是在同一个作用域内发生的最后的插入。如果在任何 INSERT 语句作用于作用域中的标识列之前调用 SCOPE_IDENTITY() 函数,则该函数将返回空值。 如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务,也永远无法回滚标识值。例如,如果因 IGNORE_DUP_KEY 冲突而导致 INSERT 语句失败,表的当前标识值仍然会增加。返回类型numeric示例以下示列创建两个表,TZ 和TY,并在 TZ 中创建一个 INSERT 触发器。当将某行插入表 TZ 中时,触发器 (Ztrig) 将激发并在 TY 中插入一行。 USE tempdb GO CREATE TABLE TZ ( Z_id int IDENTITY(1,1)PRIMARY KEY, Z_name varchar(20) NOT NULL) INSERT TZ VALUES ('Lisa') INSERT TZ VALUES ('Mike') INSERT TZ VALUES ('Carla') SELECT * FROM TZ --Result set: This is how table TZ looks. Z_id Z_name ------------- 1 Lisa 2 Mike 3 Carla CREATE TABLE TY ( Y_id int IDENTITY(100,5)PRIMARY KEY, Y_name varchar(20) NULL) INSERT TY (Y_name) VALUES ('boathouse') INSERT TY (Y_name) VALUES ('rocks') INSERT TY (Y_name) VALUES ('elevator') SELECT * FROM TY --Result set: This is how TY looks: Y_id Y_name --------------- 100 boathouse 105 rocks 110 elevator CREATE TRIGGER Ztrig ON TZ FOR INSERT AS BEGIN INSERT TY VALUES ('') END INSERT TZ VALUES ('Rosalie') SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY] GO SELECT @@IDENTITY AS [@@IDENTITY] GO 下面是结果集: SCOPE_IDENTITY 4 @@IDENTITY 115 @@IDENTITY 返回最后插入的标识值的系统函数。 语法 @@IDENTITY 备注在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。如果对包含标识列的表执行插入操作后触发了触发器,并且触发器对另一个没有标识列的表执行了插入操作,则 @@IDENTITY 将返回第一次插入的标识值。出现 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或者事务被回滚的情况时,@@IDENTITY 值不会恢复为以前的设置。 如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务,也永远无法回滚标识值。
怎么让SQLServer的id按照数字大小顺序排序
可以通过 “order by 字段名 asc (desc)” 命令进行排序。
sql:select * from tablename order by id DESC;
用 DESC 表示按倒序排序(即:从大到小排序) ,用 ACS 表示按正序排序(即:从小到大排序)。
参考资料
csdn.csdn[引用时间2018-1-28]
如何得到SqlServer的自增ID
SqlServer中的自增的ID的最后的值:
SELECT SCOPE_IDENTITY() --返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。
SELECT @@IDENTITY --返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值
SELECT IDENT_CURRENT('TbName')--不受作用域和会话的限制,而受限于指定的表。
IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
对于马上使用的刚才插入的新记录ID用SCOPE_IDENTITY()是最合适的;
对于想要得到一系列的操作中最后得到的那个自增的ID最好用@@IDENTITY;
对于想要得到一个表中的最后一个插入操作所产生的ID的最好用IDENT_CURRENT('TBName')
DECLARE @TMP_ID INT
SET @TMP_ID = IDENT_CURRENT('BID_EvaluateItem')
IF ((@TMP_ID IS NOT NULL) AND (@TMP_ID 0))
BEGIN
--其它的操作
END
如何让SQLServer的id按照数字大小顺序排序
select * from table_name order by id
select * from table_name order by id desc 是降序
select * from table_name order by id asc 是升序
如何使sqlserver的id 从20120909001开始增长呀?因为是我做的是考试系统,要用它作为准考证号。在线等。加分
SQL Server
1.通过 IDENTITY 来设置
参数有2个,一个是“初始值” 一个是“增量”。
默认情况下 INSERT 语句中,不能对 IDENTITY 的字段进行赋值。
1 CREATE TABLE test_create_tab2 (
2 id INT IDENTITY(20120909001, 1) PRIMARY KEY,
3 val VARCHAR(10)
4 );
5 go
2.直接在数据中建表的时候操作也是也可以的
不过,对于你要使用的这个自增,个人建议你还是在程序中写一个自动获取最新准考证号的方法,
在数据库表中该字段设置为varchar..
本文名称:sqlserver的id,sqlserver
文章来源:http://scyanting.com/article/hcojdi.html