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
网站URL:http://scjbc.cn/article/hcojdi.html

其他资讯