MSSQL2005後版本插入資料返回ID的新寫法

2022-01-11 19:26:52 字數 3757 閱讀 1937

例子: insert volunteersound_table (title,articlecontent)output inserted.id values ('firstval','bbbbb')

說明:inserted.id為返回的新id

output是sql server2005的新特性.可以從資料修改語句中返回輸出.可以看作是"返回結果的dml".insert,delete,update均支援output子句.在output子句中,可以引用特殊表inserted和deleted.使用inserted和deleted表與在觸發器中使用的非常相似.

在insert,delete,update中output的區別

1.對於insert,可以引用inserted表以查詢新行的屬性.

2.對於delete,可以引用deleted表以查詢舊行的屬性.

3.對於update,使用deleted表查詢被更新行在更改前的屬性,用inserted表標識被更新行在更改後的值.

輸出方式:

1.可以輸出給呼叫方(客戶端應用程式)

2.輸出給表

3.兩者皆可.

應用:一.帶有output的insert的應用

對於包含自增列的表執行多行insert語句,同時想知道新的標識值時,在insert中使用output子句非常方便.對於單行insert語句,這不成問題:scope_identity函式即可實現.

-- generating surrogate keys for customers

use tempdb;

goif object_id('dbo.customersdim') is not null

drop table dbo.customersdim;

gocreate table dbo.customersdim

(keycol int not null identity primary key,

customerid nchar(5) not null,

companyname nvarchar(40) not null,

/* ... other columns ... */

);-- insert new customers and get their surrogate keys

declare @newcusts table

(customerid nchar(5) not null primary key,

keycol int not null unique

);insert into dbo.customersdim(customerid, companyname)

output inserted.customerid, inserted.keycol

into @newcusts

-- output inserted.customerid, inserted.keycol

select customerid, companyname

from northwind.dbo.customers

where country = n'uk';

select customerid, keycol from @newcusts;

go注意**中被注釋掉的第二個output子句,後面沒有into子句.如果還要輸出返回給呼叫方,取消注釋即可.這樣,insert語句將包含兩個output子句.

示例2.

use adventureworks;

gocreate table testtable (id int, textval varchar(100))

declare @tmptable table (id int, textval varchar(100))

insert testtable (id, textval)

output inserted.id, inserted.textval into @tmptable

values (1,'firstval')

insert testtable (id, textval)

output inserted.id, inserted.textval into @tmptable

values (2,'secondval')

select * from @tmptable

select * from testtable

drop table testtable

gouse adventureworks;

gocreate table testtable (id int, textval varchar(100))

insert testtable (id, textval)

output inserted.id, inserted.textval

values (1,'firstval')

insert testtable (id, textval)

output inserted.id, inserted.textval

values (2,'secondval')

drop table testtable

go二.帶有output的delete的應用.

如果要刪除資料的同時,還需要記錄日誌,或者歸檔資料.在delete中使用output子句在適合不過了.

use adventureworks;

gocreate table testtable (id int, textval varchar(100))

declare @tmptable table (id int, textval varchar(100))

insert testtable (id, textval)

values (1,'firstval')

insert testtable (id, textval)

values (2,'secondval')

delete

from testtable

output deleted.id, deleted.textval into @tmptable

where id in (1,2)

select * from @tmptable

select * from testtable

drop table testtable

go三.帶有output的update的應用

use adventureworks;

gocreate table testtable (id int, textval varchar(100))

declare @tmptable table (id_new int, textval_new varchar(100),id_old int, textval_old varchar(100))

insert testtable (id, textval)

values (1,'firstval')

insert testtable (id, textval)

values (2,'secondval')

update testtable

set textval = 'newvalue'

output inserted.id, inserted.textval, deleted.id, deleted.textval into @tmptable

where id in (1,2)

select * from @tmptable

select * from testtable

drop table testtable

go

MSsql2005如何啟用xp cmdshell

預設情況下,sql server2005安裝完後,xp cmdshell是禁用的 可能是安全考慮 如果要使用它,可按以下步驟 允許配置高階選項 exec sp configure show advanced options 1 go 重新配置 reconfigure go 啟用xp cmdshell...

MS SQL 2005 儲存過程簡介

儲存過程介紹 1,儲存過程,是在資料庫伺服器端執行的一組 transact sql 語句的集合,經編譯後存放在資料庫伺服器中。2,儲存過程作為乙個單元進行處理並由乙個名稱來標識。它能夠向使用者返回資料 向資料庫表中寫入和修改資料,還可以執行系統函式和管理操作。在程式設計過程中只需要給出儲存過程的名稱...

thinkphp連線mssql2005配置

這裡的54表示的是php5.4,如果你的是5.3版,就改成53,如果你的php版本是執行緒安全的,那麼你的php安裝目錄下應該有乙個php5ts.dll,與這裡的兩行語句對應,如果是php5nts.dll,那麼上面的語句應該是 php pdo sqlsrv extension php pdo sql...