第一種方法: insert into table1 values(colvalue1,colvalue2)select ident_current('table1') 第二種方法: insert into table1 values(colvalue1,colvalue2) select @@identity 主要應(yīng)用Transact-SQL中的函數(shù)1、IDENT_CURRENT() 2、SQL Server 2000 標(biāo)識函數(shù) SCOPE_IDENTITY ()3、SQL Server 2000 標(biāo)識函數(shù) @@IDENTITY IDENT_CURRENT() 返回為某個(gè)會話和作用域中指定的表或視圖生成的最新的標(biāo)識值。語法 IDENT_CURRENT( 'table_name' ) 備注IDENT_CURRENT 類似于 SQL Server 2000 標(biāo)識函數(shù) SCOPE_IDENTITY 和 @@IDENTITY。這三個(gè)函數(shù)都返回最后生成的標(biāo)識值。但是,上述每個(gè)函數(shù)中定義的“最后”的作用域和會話有所不同。IDENT_CURRENT 返回為某個(gè)會話和用域中的指定表生成的最新標(biāo)識值。 @@IDENTITY 返回為跨所有作用域的當(dāng)前會話中的某個(gè)表生成的最新標(biāo)識值。 SCOPE_IDENTITY 返回為當(dāng)前會話和當(dāng)前作用域中的某個(gè)表生成的最新標(biāo)識值。 在空表中調(diào)用 IDENT_CURRENT 函數(shù)時(shí),此函數(shù)將返回 NULL。 如果語句和事務(wù)失敗,它們會更改表的當(dāng)前標(biāo)識,從而使標(biāo)識列中的值出現(xiàn)不連貫現(xiàn)象。即使未提交試圖向表中插入值的事務(wù),也永遠(yuǎn)無法回滾標(biāo)識值。例如,如果因 IGNORE_DUP_KEY 沖突而導(dǎo)致 INSERT 語句失敗,表的當(dāng)前標(biāo)識值仍然會增加。參數(shù) table_name 其標(biāo)識值被返回的表的名稱。table_name 的數(shù)據(jù)類型為 varchar,無默認(rèn)值。返回類型sql_variant示例以下示例將顯示由 IDENT_CURRENT、@@IDENTITY 和SCOPE_IDENTITY 返回的不同標(biāo)識值。 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 () 返回插入到同一作用域中的標(biāo)識列內(nèi)的最后一個(gè)標(biāo)識值。一個(gè)范圍是一個(gè)模塊:存儲過程、觸發(fā)器、函數(shù)或批處理。因此,如果兩個(gè)語句處于同一個(gè)存儲過程、函數(shù)或批處理中,則它們位于相同的作用域中。語法 SCOPE_IDENTITY() 備注SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 是相似的函數(shù),因?yàn)樗鼈兌挤祷夭迦氲綐?biāo)識列中的值。IDENT_CURRENT 不受作用域和會話的限制,而受限于指定的表。IDENT_CURRENT 返回為任何會話和作用域中的特定表所生成的值。有關(guān)詳細(xì)信息,請參閱 IDENT_CURRENT (Transact-SQL)。SCOPE_IDENTITY 和 @@IDENTITY 返回在當(dāng)前會話中的任何表內(nèi)所生成的最后一個(gè)標(biāo)識值。但是,SCOPE_IDENTITY 只返回插入到當(dāng)前作用域中的值;@@IDENTITY 不受限于特定的作用域。例如,有兩個(gè)表 T1 和 T2,并且在 T1 上定義了 INSERT 觸發(fā)器。當(dāng)將某行插入 T1 時(shí),觸發(fā)器被激發(fā),并在 T2 中插入一行。 該方案演示了兩個(gè)作用域:在 T1 上的插入,以及在 T2 通過觸發(fā)器的插入。假設(shè)T1 和 T2 都有標(biāo)識列,@@IDENTITY 和 SCOPE_IDENTITY 將在 T1 上的 INSERT 語句的最后返回不同的值。@@IDENTITY 將返回在當(dāng)前會話中的任何作用域內(nèi)插入的最后一個(gè)標(biāo)識列的值。這是在 T2 中插入的值。SCOPE_IDENTITY() 將返回在 T1 中插入的 IDENTITY 值。這是在同一個(gè)作用域內(nèi)發(fā)生的最后的插入。如果在任何 INSERT 語句作用于作用域中的標(biāo)識列之前調(diào)用 SCOPE_IDENTITY() 函數(shù),則該函數(shù)將返回空值。 如果語句和事務(wù)失敗,它們會更改表的當(dāng)前標(biāo)識,從而使標(biāo)識列中的值出現(xiàn)不連貫現(xiàn)象。即使未提交試圖向表中插入值的事務(wù),也永遠(yuǎn)無法回滾標(biāo)識值。例如,如果因 IGNORE_DUP_KEY 沖突而導(dǎo)致 INSERT 語句失敗,表的當(dāng)前標(biāo)識值仍然會增加。返回類型numeric示例以下示列創(chuàng)建兩個(gè)表,TZ 和TY,并在 TZ 中創(chuàng)建一個(gè) INSERT 觸發(fā)器。當(dāng)將某行插入表 TZ 中時(shí),觸發(fā)器 (Ztrig) 將激發(fā)并在 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 下面是結(jié)果集: SCOPE_IDENTITY 4 @@IDENTITY 115 @@IDENTITY 返回最后插入的標(biāo)識值的系統(tǒng)函數(shù)。 語法 @@IDENTITY 備注在一條 INSERT、SELECT INTO 或大容量復(fù)制語句完成后,@@IDENTITY 中包含語句生成的最后一個(gè)標(biāo)識值。如果語句未影響任何包含標(biāo)識列的表,則 @@IDENTITY 返回 NULL。如果插入了多個(gè)行,生成了多個(gè)標(biāo)識值,則 @@IDENTITY 將返回最后生成的標(biāo)識值。如果語句觸發(fā)了一個(gè)或多個(gè)觸發(fā)器,該觸發(fā)器又執(zhí)行了生成標(biāo)識值的插入操作,那么,在語句執(zhí)行后立即調(diào)用 @@IDENTITY 將返回觸發(fā)器生成的最后一個(gè)標(biāo)識值。如果對包含標(biāo)識列的表執(zhí)行插入操作后觸發(fā)了觸發(fā)器,并且觸發(fā)器對另一個(gè)沒有標(biāo)識列的表執(zhí)行了插入操作,則 @@IDENTITY 將返回第一次插入的標(biāo)識值。出現(xiàn) INSERT 或 SELECT INTO 語句失敗或大容量復(fù)制失敗,或者事務(wù)被回滾的情況時(shí),@@IDENTITY 值不會恢復(fù)為以前的設(shè)置。 如果語句和事務(wù)失敗,它們會更改表的當(dāng)前標(biāo)識,從而使標(biāo)識列中的值出現(xiàn)不連貫現(xiàn)象。即使未提交試圖向表中插入值的事務(wù),也永遠(yuǎn)無法回滾標(biāo)識值。
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比皋蘭網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式皋蘭網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋皋蘭地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
列設(shè)成整型,并自增
SqlServer中的自增的ID的最后的值:
SELECT
SCOPE_IDENTITY() --返回插入到同一作用域中的 IDENTITY 列內(nèi)的最后一個(gè) IDENTITY 值。SELECT
@@IDENTITY --返回插入到當(dāng)前會話中任何作用域內(nèi)的最后一個(gè) IDENTITY 列值SELECT
IDENT_CURRENT('TbName')--不受作用域和會話的限制,而受限于指定的表。IDENT_CURRENT
返回為任何會話和作用域中的特定表所生成的值。
一個(gè)作用域就是一個(gè)模塊——存儲過程、觸發(fā)器、函數(shù)或批處理。因此,如果兩個(gè)語句處于同一個(gè)存儲過程、函數(shù)或
批處理中,則它們位于相同的作用域中。對于馬上使用的剛才插入的新記錄ID用SCOPE_IDENTITY()是最合適的;對于想要得到一系列的操作中最
后得到的那個(gè)自增的ID最好用@@IDENTITY;對于想要得到一個(gè)表中的最后一個(gè)插入操作所產(chǎn)生的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 --其它的操作
設(shè)成GUID類型 select newid() 可保證全球唯一
設(shè)置ID主鍵自增?在創(chuàng)建表的時(shí)候就可以。在新增數(shù)據(jù)的時(shí)候就不需要對ID進(jìn)行賦值了createtabletableName(idintidentity(1,1)primarykey,datavarchar(50))/*identity(1,1)就是自動增加,第一個(gè)參數(shù)是種子值,第二個(gè)是增量值;primarykey是主鍵*/