『壹』 sql中,如何得到新增數據的id(主鍵自增)
用存儲過程返回 @@IDENTITY
就是新增數據ID
或者升級到SQL2005以後使用帶有output的insert
into語句
INSERT INTO [表]([欄位列表]) output inserted.id VALUES ('欄位值')
『貳』 SQL 程序如何獲取自增表中的自增列的值
假設表結構如下:
CREATE TABLE TestTable
(
id int identity,
CreatedDate datetime
)
SQL2005獲得新增行的自動增長列的語句如下:
insert into TestTable (CreatedDate) output inserted.id values (getdate())
output 是sql server2005的新特性,可以從數據修改語句中返回輸出,可以看作是「返回結果的DML」
2005之後 Insert,Delete,Update語句 均支持Output語句。
在Output語句中可以引用inserted和deleted。使用方法同觸發器類似。
該方法最大弊端就是需要指定主鍵。output Inserted.要返回的值。
帶有output的insert語句.
@@identity只能返回當前會話最後生產的標識列. 如果一次性插入多條語句的話. 需要返回這些自動生產的標識列. 那麼outpu就派上用場了.
declare @temp table(k int, v nvarchar(200))
insert into t1(datacol)
output inserted.keycol, inserted.datacol
into @temp
select lastname from TSQLFundamentals2008.hr.Employees where country='uk'
select * from @temp
帶有output的delete語句和update語句也大同小異.
delete語句能操作deleted臨時表. 而update的本質是delete和insert一次能操作inserted和updated兩張表.
帶有output的merge子句.
在merge子句的output輸出中可以調用@action函數. 會返回一個代表相應操作的字元串(insert, update, delete)
SQL2000獲得新增行的自動增長列的語句如下:
insert into TestTable (CreatedDate) values (getdate())
select @@IDENTITY
用select @@identity得到上一次插入記錄時自動產生的ID
如果你使用存儲過程的話,將非常簡單,代碼如下:SET @NewID=@@IDENTITY
@@identity使用注意事項:
我們要慎用@@IDENTITY,原因是 @@IDENTITY 它總是獲取最後一條變更數據的自增欄位的值,
而忽略了進行變更操作所在的范圍約束。比如,我有表 A 和表 B 兩個表,現在我在表 A 上定義了一個Insert觸發器,當在表 A 中插入一條數據時,自動在表 B 也插入一條數據。此時,大家注意,有兩個原子操作:在A中插入一條數據, 接著在B中隨後插入一條數據。
現在我們想下,假設上面表 A 和表 B 都有IDENTITY自增域,那麼我們在表 A 插入一條數據後,使用了 SELECT @@IDENTITY 輸出時,輸出的到底是 A 還是 B 的自增域的值呢? 答案很明顯,是誰最後插入就輸出誰,那麼就是 B 了。於是,我本意是想得到 A 的自增域值,結果得到了 B 的自增域值,一隻 BUG 隨之誕生,搞不好還會影響到整個系統數據的混亂。
因此,對於這種情況,建議大家慎用 @@IDENTITY,而盡量採用SCOPE_IDENTITY()函數替換之。SCOPE_IDENTITY() 也是得到最後一條自增域的值,但是它是僅限在一個操作范圍之內,而不@@IDENTITY 是取全局操作的最後一步操作所產生的自增域的值的。
SCOPE_IDENTITY 和 @@IDENTITY 返回在當前會話中的任何錶內所生成的最後一個標識值。但是,SCOPE_IDENTITY 只返回插入到當前作用域中的值;@@IDENTITY 不受限於特定的作用域。
在C#中使用ExecuteScalar()方法獲得第一行第一列的值(即自增id):
object val = cmd.ExecuteScalar();
『叄』 sql server怎麼獲取自增的id值
SELECT SCOPE_IDENTITY() --返回插入到同一作用域中的 IDENTITY 列內的最後一個 IDENTITY 值。
SELECT @@IDENTITY --返回插入到當前會話中任何作用域內的最後一個 IDENTITY 列值
SELECT IDENT_CURRENT('TbName')--不受作用域和會話的限制,而受限於指定的表。
『肆』 SQL Server中怎樣設置id號自動增長
createtable表名--第一種用sql建表identity(1,1)為每次遞增1位primarykey為主鍵
(
idintidentity(1,1)primarykey
)
--第二種用設計器來操作
--滑鼠對准你需要操作的表名右擊=>設計=>
選中你需要操作的列名然後在下方有一個列屬性=>選擇標識規范=>
將標識增量此選項選為(是)下面有一個標識種子默認為1(每次遞增1,可修改)
『伍』 資料庫如何設置主鍵(ID)自動增長啊(SQL語句)
在創建表的時候可以設置,方法如下,用一下sql語句。
createtabletableName(
idintidentity(1,1)primarykey,
datavarchar(50))
解釋:其中identity(1,1)代表自增,第一個1代表從1開始計數,第二個1代表每次增長1。
(5)sql獲取自增長id擴展閱讀:
SQL全名是結構化查詢語言[1](Structured Query Language),是用於資料庫中的標准數據查詢語言,IBM公司最早使用在其開發的資料庫系統中。1986年10月,美國國家標准學會(ANSI) 對 SQL 進行規范後,以此作為關系式資料庫管理系統的標准語言 (ANSI X3. 135-1986),1987年得到國際標准組織的支持下成為國際標准。不過各種通行的資料庫系統在其實踐過程中都對 SQL 規范作了某些編改和擴充。所以,實際上不同資料庫系統之間的SQL不能完全相互通用。
參考資料:
網路-SQL語言
『陸』 如何在sql中插入記錄時返回id(id為自動增長)
insert into [table] values(null) select SCOPE_IDENTITY()
重點在插入後面的select
『柒』 SQL查詢,獲取最後一行自增ID
插入後,用以下語句獲得上一個自增列的ID。
SELECT @@IDENTITY;
『捌』 Mysql資料庫中,設置id為自動增加,向資料庫中插入數據時,SQL語句怎麼寫
在建立表的時候設置id為自動增長的 [id] [int] IDENTITY (1, 1)
SQL語句是insert into user(name,passwd) values (name ,passwd)。新增一條數據 id 就會自動加1
INSERT INTO是sql資料庫中的語句,可以用於向表格中插入新的行。
(8)sql獲取自增長id擴展閱讀
(1) 數據記錄篩選:
sql="select * from 數據表 where欄位名=欄位值 order by欄位名[desc]"(按某個欄位值降序排列。默認升序ASC)
sql="select * from 數據表 where欄位名like '%欄位值%' order by 欄位名 [desc]"
sql="select top 10 * from 數據表 where欄位名=欄位值 order by 欄位名 [desc]"
sql="select top 10 * from 數據表 order by 欄位名 [desc]"
sql="select * from 數據表 where欄位名in ('值1','值2','值3')"
sql="select * from 數據表 where欄位名between 值1 and 值2"
(2) 更新數據記錄:
sql="update 數據表 set欄位名=欄位值 where 條件表達式"
sql="update 數據表 set 欄位1=值1,欄位2=值2 ?? 欄位n=值n where 條件表達式"
(3) 刪除數據記錄:
sql="delete from 數據表 where 條件表達式"
sql="delete from 數據表" (將數據表所有記錄刪除)
(4) 添加數據記錄:
sql="insert into 數據表 (欄位1,欄位2,欄位3 ?) values (值1,值2,值3 ?)"
sql="insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表)
(5) 數據記錄統計函數:
AVG(欄位名) 得出一個表格欄平均值
COUNT(*;欄位名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(欄位名) 取得一個表格欄最大的值
MIN(欄位名) 取得一個表格欄最小的值
SUM(欄位名) 把數據欄的值相加
引用以上函數的方法:
sql="select sum(欄位名) as 別名 from 數據表 where 條件表達式"
set rs=conn.excute(sql)
用 rs("別名") 獲取統計的值,其它函數運用同上。
查詢去除重復值:select distinct * from table1
(6) 數據表的建立和刪除:
CREATE TABLE 數據表名稱(欄位1 類型1(長度),欄位2 類型2(長度) ?? )
(7) 單列求和:
SELECT SUM(欄位名) FROM 數據表