使用@IDENTITY

转载 2007年10月06日 20:34:00

                        基本知识

1. IDENTITY 列不能由用户直接更新,它是由系统自动维护的。

2.该列数据类型必须为数值型:int, smallint, tinyint, decimal or numeric with scale 0。

3.该列不能为 null。

4.不能在该列上设置缺省值。

5.递增量只能为整形(比如:1,2,-3)。不能为小数,也不能为0。

6.基值(种子值 seed)可以由用户设置,缺省值为1。

理解 @@IDENTITY

@@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy。如果在给没有 IDENTITY 列的其他表插入记录,系统将其置为 null。如果有多行记录插入到 IDENTITY 表中,@@IDENTITY 表示最后一个产生的值。如果触发了某个触发器,并且这个触发器执行向另一个带有 IDENTITY 列的表的插入操作,@@IDENTITY 将返回这个由触发器产生的值。如果这个触发器插入的表中不包含 IDENTITY 列,那么 @@IDENTITY 将为 null。如果插入操作失败,@@IDENTITY 值依然会增加,所以 IDENTITY 不保证数据的连续性。

@@IDENTITY 是当前连接的全局变量,只对当前连接有效。也就是说,如果断开连接再重新连接后,@@IDENTITY 为 null。以 ADO 来说,@@IDENTITY 在 Connection 对象打开和关闭期间是有意义的,即在 Connection 对象的存在范围内有效。在 MTS 组件中,从打开连接到显式的关闭连接(Connection.Close)或者到调用了 SetAbort,SetComplete之前,在这期间,@@IDENTITY 有意义。

使用 Truncate table 语句会使 IDENTITY 列重新开始计算。

得到 @@IDENTITY 的值

有三种方法(以下代码均使用 VBScript)

方法一:

Dim Conn, strSQL, Rs
Set Conn = CreateObject("ADODB.Connection")
' Open a connection to the database
Conn.Open("DSN=myDSN;UID=myUID;PWD=myPWD;")

' Insert a new record into the table
strSQL = "INSERT INTO mtTable (columnName) VALUES ('something')"

' Execute the SQL statement
Conn.Execute(strSQL)

' Get the @@IDENTITY.
strSQL = "SELECT @@IDENTITY AS NewID"
Set Rs = Conn.Execute(lsSQL)
NewID = Rs.Fields("NewID").value

' Close the connection
Conn.Close()
Set Conn = Nothing

方法二(仅限于 ADO 2.0 以上):

Dim Conn, strSQL, Rs
Set Conn = CreateObject("ADODB.Connection")
' Open a connection to the database
Conn.Open("DSN=myDSN;UID=myUID;PWD=myPWD;")

' Insert a new record into the table
lsSQL = "INSERT INTO myTable (columnName) VALUES ('something');" &_
"SELECT @@IDENTITY AS NewID;"

' Execute the SQL statement
Set Rs = Conn.Execute(lsSQL)

' Get the second resultset into a RecordSet object
Set Rs = Rs.NextRecordSet()

' Get the inserted ID
NewID = Rs.Fields("NewID").value

' Close the connection
Conn.Close()
Set Conn = Nothing

方法三:

Dim Conn, strSQL, Rs
Set Conn = CreateObject("ADODB.Connection")
' Open a connection to the database
Conn.Open("DSN=myDSN;UID=myUID;PWD=myPWD;")

' Insert a new record into the table
strSQL = "SET NOCOUNT ON;" &_
"INSERT INTO myTable (columnName) VALUES ('something');" &_
"SELECT @@IDENTITY AS NewID;"

' Execute the SQL statement
Set Rs = Conn.Execute(lsSQL)

' Get the inserted ID
NewID = Rs.Fields("NewID").value

' Close the connection
Conn.Close()
Set Conn = Nothing  

[DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题

对于刚从Oracle转向MySql的人都会为,MySql中没有Oracle里的Sequence而感到困惑。MySql中没有了Sequence,那么MySql的主键用什么方式来实现最好呢? 主要有以下几...
  • szwangdf
  • szwangdf
  • 2014年12月15日 15:09
  • 6505

VS2013中web项目中自动生成的ASP.NET Identity代码思考

vs2013没有再分webform、mvc、api项目,使用vs2013创建一个web项目模板选MVC,身份验证选个人用户账户。项目会生成ASP.NET Identity的一些代码。这些代码主要在Ac...
  • jurken
  • jurken
  • 2015年10月14日 13:29
  • 2817

使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建

上个月有一个星期的时间都在研究asp.net mvc统一身份验证及单点登录的实现。经过了一番的探索,最终决定使用微软的Windows Identity Foundation。但是这东西用的人貌似不多,...
  • ojlovecd
  • ojlovecd
  • 2013年02月20日 23:57
  • 15612

asp.net identity(微软首推的身份验证)2.0分析-基于vs2015默认程序

因为总是感觉,asp.net identity用起来不太舒服,比如代码的扩展性,以及维护以后的版本,所以对其进行分析 下面进入正文: 在vs2015自带的默认程序中,App_Start/Ident...
  • loongsking
  • loongsking
  • 2017年02月05日 17:50
  • 871

IDENTITY属性的使用详解

IDENTITY属性的使用1.创建查看IDENTITY 创建 IF OBJECT_ID('test','U') IS NOT NULL DROP TABLE test ...
  • xingerr
  • xingerr
  • 2017年06月25日 11:57
  • 322

VS2013+EF+Identity管理用户登录

创建ASP.NET MVC 5应用程序 一、创建新的MVC项目的步骤如下:     1、选择File|New Project 选项,图1 2、创建Solution,看个人喜好,通常我是先建立一个S...
  • qq_33536110
  • qq_33536110
  • 2017年06月17日 20:23
  • 278

去掉identity列属性范例

当我们需要去掉一个列上的identity属性时。 我们需要做的就是:创建一个完全一样的新表,再将数据转移仅新表中,删除旧表。重命名新表。 下面就是一个此过程的范例,值得注意的是,当旧表数据量很大时...
  • starseeker7
  • starseeker7
  • 2013年01月30日 10:57
  • 988

语音资料和资源归总……(实时更新)

博客类:       1.bill  xia 的博客:http://ibillxia.github.io/blog/categories/assp/             这个大神的博客有深度学习的...
  • u010384318
  • u010384318
  • 2014年02月25日 20:50
  • 4111

矩阵等式 matrix identity(numpy仿真)

∑ixTiAxi=tr(A∑ixixTi)=tr(AXXT) \sum_i x_i^TAx_i=tr(A\sum_ix_ix_i^T)=tr(AXX^T) import numpy as npdef ...
  • lanchunhui
  • lanchunhui
  • 2016年01月08日 17:44
  • 791

SQL Server中为现有的列添加或去掉标识(Identity)属性

SQL Server中为现有的列添加或去掉标识属性   问题:   SQLServer有一个不错的常用特性,就是标识列。利用这个特性,你可以轻松地在表里为每一行创建唯一的值。添加一个新的列并...
  • poolatu
  • poolatu
  • 2013年02月22日 09:44
  • 10895
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用@IDENTITY
举报原因:
原因补充:

(最多只允许输入30个字)