『壹』 在sql Server中如何獲得剛插入一條新記錄的自動ID號
SELECTIDENT_CURRENT('TableName')--返回當前的最後自動編號
SELECTIDENT_INCR('TableName')--返回增量值
SELECTIDENT_SEED('TableName')--返回種子值
返回下一個自動編號:
SELECTIDENT_CURRENT('TableName')+(SELECTIDENT_INCR('TableName'))
--創建資料庫和表
createdatabaseMyDataBase
useMyDataBase
createtablemytable
(
idintidentity(1,1),
namevarchar(20)
)
--執行這個SQL,就能查出來剛插入記錄對應的自增列的值
insertintomytablevalues('李四')
select@@identity
『貳』 sql中,如何得到新增數據的id(主鍵自增)
用存儲過程返回 @@IDENTITY
就是新增數據ID
或者升級到SQL2005以後使用帶有output的insert
into語句
INSERT INTO [表]([欄位列表]) output inserted.id VALUES ('欄位值')
『叄』 如何在sql中插入記錄時返回id(id為自動增長)
IDENT_CURRENT 返回為任何會話和任何作用域中的特定表最後生成的標識值。IDENT_CURRENT 不受作用域和會話的限制,而受限於指定的表。IDENT_CURRENT 返回為任何會話和作用域中的特定表所生成的值。 @@IDENTITY 返回為當前會話的所有作用域中的任何錶最後生成的標識值。 SCOPE_IDENTITY 返回為當前會話和當前作用域中的任何錶最後生成的標識值SCOPE_IDENTITY 和 @@IDENTITY 返回在當前會話中的任何錶內所生成的最後一個標識值。但是,SCOPE_IDENTITY 只返回插入到當前作用域中的值;@@IDENTITY 不受限於特定的作用域。例如,有兩個表 T1 和 T2,在 T1 上定義了一個 INSERT 觸發器。當將某行插入 T1 時,觸發器被激發,並在 T2 中插入一行。此例說明了兩個作用域:一個是在 T1 上的插入,另一個是作為觸發器的結果在 T2 上的插入。假設T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 將在 T1 上的 INSERT 語句的最後返回不同的值。@@IDENTITY 返回插入到當前會話中任何作用域內的最後一個 IDENTITY 列值,該值是插入 T2 中的值。SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,該值是發生在相同作用域中的最後一個 INSERT。如果在作用域中發生插入語句到標識列之前喚醒調用 SCOPE_IDENTITY() 函數,則該函數將返回 NULL 值。而IDENT_CURRENT('T1') 和 IDENT_CURRENT('T2') 返回的值分別是這兩個表最後自增的值。ajqc的實驗:(40條本地線程,40+40條遠程線程同時並發測試,插入1200W行),得出的結論是: 1.在典型的級聯應用中.不能用@@IDENTITY,在CII850,256M SD的機器上1W多行時就會並發沖突.在P42.8C,512M DDR上,才6000多行時就並發沖突. 2.SCOPE_IDENTITY()是絕對可靠的,可以用在存儲過程中,連觸發器也不用建,沒並發沖突 SELECT IDENT_CURRENT('TableName') --返回指定表中生成的最後一個標示值 SELECT IDENT_INCR('TableName')--返回指定表的標示欄位增量值 SELECT IDENT_SEED('TableName')--返回指定表的標示欄位種子值返回最後插入記錄的自動編號 SELECT IDENT_CURRENT('TableName') 返回下一個自動編號:
『肆』 如何獲取剛插入數據的ID值 並將它插入到別的表裡面
後台用的DWZ模板,不錯哦,跟我現在用的是一樣,不過建議你把返回值做成函數封裝起來,
不用每次寫"{"statusCode":"300","message":"錯誤這種東西。
插入的id就是$uid=mysql_insert_id();啊
『伍』 如何獲取資料庫新插入數據的主鍵id
例如我們新建了一張表T_User,欄位如下u_id,主鍵,為標示符,user_name......然後我們來執行一個新增插入操作:
insert into T_User(user_name,user_password,user_email,user_ip)
values('admin','123456','[email protected]','58.20.158.20') ;
有一天,我們想在新增插入數據的時候獲取到插入這條數據的u_id的值是多少,我們知道從MSSQL2005以後新增了一個output,用來輸入某個值,我們就可以利用它來實現
解決的方法有兩種:
1、一種是直接輸入某個欄位,如:
insert into T_User(user_name,user_password,user_email,user_ip) output inserted.u_id //output
inserted.u_id一定要放在 values之前,不能放在sql語句的最後面,不然是出錯的,inserted是固定的,你想輸入當前插入的某個欄位就在後面接這個欄位即可,我們想獲得的是u_id所以是inserted.u_id
values('admin','123456','[email protected]','58.20.158.20') ;
2、另一種方法是使用@@identity,@@identity是系統內置的一個全局變數,其作用就是輸入最後一次的標示符,我們可以兩步走也可以通過一步實現
一步實現的代碼如下
insert into T_User(user_name,user_password,user_email,user_ip) output @@identity
values('admin','123456','[email protected]','58.20.158.20') ;
『陸』 SQL插入一個數據時,如何獲取ID
試試在insert語句最後加上returning id會在插入後返回插入的這條的id,同理,將id換成別的欄位名會返回指定欄位的值。如果你是pg資料庫的話。
『柒』 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 值不會恢復為以前的設置。 如果語句和事務失敗,它們會更改表的當前標識,從而使標識列中的值出現不連貫現象。即使未提交試圖向表中插入值的事務,也永遠無法回滾標識值。
『捌』 sql向資料庫插入指定ID的數據方法
你所謂自動獲取是自動增長的意思吧
在這種模式下是不能插入指定的ID的
這種ID是順序增加的 增加的間距可以自己設定
『玖』 SQL插入語句,insert 插入數據,要插入到我指定的Id中
UPDATE SheJiaoPingTan SET richTextBox='你好哦!'
where ID=1
『拾』 如何獲得剛插入資料庫的記錄的ID號
或者:PRINT SCOPE_IDENTITY() /'這將獲得在當前存儲過程,觸發器等其他程序創建的最新記錄的IDENTITY值. 而全局變數@@IDENTITY有一個問題,當對一張表執行insert時,如果該表有觸發器程序在執行插入操作,然後,接著在另一張表中插入記錄,這樣返回@@IDENTITY值就是第二張表的IDENTITY值。 如果你用的不是SQL Server 2000,你最好一個簡單的存儲過程來解決這個問題。 set rs = conn.execute(exec myProc @param1= & fakeValue) response.write New ID was & rs(0) rs.close: set rs = nothing conn.close: set conn = nothing % 2.Access 對於Access,你可以用下面這樣的方法: <% fakeValue = 5 set conn = Server.CreateObject(ADODB.Connection) conn.open conn.execute Insert into someTable(intField) values( & fakeValue & ) set rs = conn.execute(select MAX(ID) from someTable) response.write New ID was & rs(0) rs.close: set rs = nothing conn.close: set conn = nothing % 然而對於多人同時向資料庫中添加數據,我們就要利用記錄集的adOpenKeyset游標來防止出錯。