CREATE?TRIGER?trig_MyTrigger?ON?table?AFTER?INSERT
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括祁門網(wǎng)站建設(shè)、祁門網(wǎng)站制作、祁門網(wǎng)頁制作以及祁門網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,祁門網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到祁門省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
AS
BEGIN
DECLARE?@cur?CURSOR
DECLARE?@courseid?int
SET?@cur?=?CURSOR?FOR?SELECT?COURSEID?FROM?inserted
OPEN?@cur
FETCH?NEXT?FROM?@cur?INTO?@courseid
WHILE(@@FETCH_STATUS=0)
BEGIN
UPDATE?table2
SET?OPENTIME=xxxxx
WHERE?COURSEID=@courseid
FETCH?NEXT?FROM?@cur?INTO?@curseid
END
CLOSE?@cur
DEALLOCATE?@cur
END
循環(huán)里面的UPDATE語句就是你的修改語句
需要分支的話可以用IF...ELSE IF...ELSE分支語句
@courseid是插入的編號
你這種情況用不著分支語句,
如果=2修改時是完全修改的話,如下:
delete B from A,B
where A.column1 and (AB主鍵關(guān)聯(lián))
go
innsert into B
select * from A
where column3
go
查詢結(jié)果重復(fù)利用的問題:
鑒于你要用到的SQL插入語句是insert into table1 select * from table2
所以任何一次執(zhí)行都是要進(jìn)行select 的,但是SQL 引擎對這種情況提供了緩存機(jī)制,也就是每一個查詢語句都不是直接就執(zhí)行的,而是先到緩存區(qū)調(diào)用想同的查詢,提高效率。我想這種做法雖然達(dá)不到你所說的重復(fù)利用,但是已經(jīng)很不錯了。
另外,如果你不想影響讓這個查詢影響別人對A表的操作,那你可以將數(shù)據(jù)先存到一個臨時表,變成每次只對A表查詢一次,然后對臨時表多次的操作。
至于你說的SQL 的分支語句,sql有幾個特殊語法可以解決:while,if,goto label, if exists() 等等,詳細(xì)的用法網(wǎng)上有不少詳解。
最后想說的是,能不用游標(biāo)最好不用,除非你很強(qiáng),知道什么時候用游標(biāo)比其他方式的效率都高。
是因?yàn)闆]有安裝SQLEXPRESS實(shí)例,它只是SQL中的一個分支版本,免費(fèi)且可自由轉(zhuǎn)散布,但是,對數(shù)據(jù)庫文件大小有限制,一般僅作小型開發(fā)使用。如果本機(jī)安裝了其它SQL版本,也可以直接使用其它的SQL實(shí)例進(jìn)行開發(fā),對開發(fā)工作不會有影響。
SQL Server2008版本很多,根據(jù)我們的需求,選擇的SQL Server2008版本也各不相同,而根據(jù)應(yīng)用程序的需要,安裝要求亦會有所不同。
不同版本的 SQL Server 能夠滿足單位和個人獨(dú)特的性能、運(yùn)行時以及價格要求。安裝哪些 SQL Server 組件還取決于您的具體需要。下面的部分將幫助您了解如何在SQL Server2008的不同版本和可用組件中做出最佳選擇。
SQL Server 2008 的服務(wù)器版本下表介紹SQL Server2008的各個服務(wù)器SQL Server2008版本版本:
術(shù)語 定義
Enterprise(x86、x64 和 IA64)1
SQL Server Enterprise 是一種綜合的數(shù)據(jù)平臺,可以為運(yùn)行安全的業(yè)務(wù)關(guān)鍵應(yīng)用程序提供企業(yè)級可擴(kuò)展性、性能、高可用性和高級商業(yè)智能功能。有關(guān)詳細(xì)信息,請參閱 SQL Server 2008 各個版本支持的功能。
Standard(x86 和 x64)
SQL Server Standard 是一個提供易用性和可管理性的完整數(shù)據(jù)平臺。它的內(nèi)置業(yè)務(wù)智能功能可用于運(yùn)行部門應(yīng)用程序。有關(guān)詳細(xì)信息,請參閱 SQL Server 2008 各個版本支持的功能。
SQL Server Standard for Small Business 包含 SQL Server Standard 的所有技術(shù)組件和功能,可以在擁有 75 臺或更少計(jì)算機(jī)的小型企業(yè)環(huán)境中運(yùn)行。
1目前可以使用的 Enterprise 是可試用 180 天的 SQL Server 2008 Enterprise Evaluation。有關(guān)詳細(xì)信息,請參閱 SQL Server 網(wǎng)站。
SQL Server 2008 專業(yè)版SQL Server 2008 專業(yè)版是針對特定的用戶群體而設(shè)計(jì)的。下表介紹 SQL Server 2008 的各個專業(yè)版。
術(shù)語 定義
SQL Server 2008 Developer(x86、x64 和 IA64)
SQL Server 2008 Developer 支持開發(fā)人員構(gòu)建基于 SQL Server 的任一種類型的應(yīng)用程序。它包括 SQL Server 2008 Enterprise 的所有功能,但有許可限制,只能用作開發(fā)和測試系統(tǒng),而不能用作生產(chǎn)服務(wù)器。SQL Server 2008 Developer 是構(gòu)建和測試應(yīng)用程序的人員的理想之選??梢陨?SQL Server 2008 Developer 以將其用于生產(chǎn)用途。
工作組(x86 和 x64)
SQL Server Workgroup 是運(yùn)行分支位置數(shù)據(jù)庫的理想選擇,它提供一個可靠的數(shù)據(jù)管理和報(bào)告平臺,其中包括安全的遠(yuǎn)程同步和管理功能。
Web(x86、x64)
對于為從小規(guī)模至大規(guī)模 Web 資產(chǎn)提供可擴(kuò)展性和可管理性功能的 Web 宿主和網(wǎng)站來說,SQL Server 2008 Web 是一項(xiàng)總擁有成本較低的選擇。
SQL Server Express(x86 和 x64)
SQL Server Express with Tools(x86 和 x64)
SQL Server Express with Advanced Services(x86 和 x64)
SQL Server Express 數(shù)據(jù)庫平臺基于 SQL Server 2008。它也可用于替換 Microsoft Desktop Engine (MSDE)。SQL Server Express 與 Visual Studio 集成,從而開發(fā)人員可以輕松開發(fā)功能豐富、存儲安全且部署快速的數(shù)據(jù)驅(qū)動應(yīng)用程序。
SQL Server Express 免費(fèi)提供,且可以由 ISV 再次分發(fā)(視協(xié)議而定)。SQL Server Express 是學(xué)習(xí)和構(gòu)建桌面及小型服務(wù)器應(yīng)用程序的理想選擇,也是獨(dú)立軟件供應(yīng)商、非專業(yè)開發(fā)人員和熱衷于構(gòu)建客戶端應(yīng)用程序的人員的最佳選擇。如果您需要使用更高級的數(shù)據(jù)庫功能,則可以將 SQL Server Express 無縫升級到更復(fù)雜的 SQL Server 版本。
Compact 3.5 SP1 (x86)
Compact 3.1 (x86)
SQL Server Compact 3.5 免費(fèi)提供,是生成用于基于各種 Windows 平臺的移動設(shè)備、桌面和 Web 客戶端的獨(dú)立和偶爾連接的應(yīng)用程序的嵌入式數(shù)據(jù)庫理想選擇。
有關(guān) SQL Server 2008 各個專業(yè)版的詳細(xì)信息,請參閱 SQL Server 網(wǎng)站。
1、可視化創(chuàng)建
a.登錄SQL Server
b.打開數(shù)據(jù)庫==》要創(chuàng)建存儲過程的數(shù)據(jù)庫==》可編程性==》存儲過程
c.選中“存儲過程”右擊 ,在系出現(xiàn)的對話框中選擇“新建存儲過程”
d.在右側(cè)出現(xiàn)的對話框中填寫具體存儲過程內(nèi)容完成后執(zhí)行即可
2、代碼創(chuàng)建
a.全手寫代碼
一、定義變量
--簡單賦值?
declare?@a?int
set?@a=5?
print?@a?
--使用select語句賦值?
declare?@user1?nvarchar(50)?
select?@user1='張三'
print?@user1?
declare?@user2?nvarchar(50)?
select?@user2?=?Name?from?ST_User?where?ID=1?
print?@user2?
--使用update語句賦值?
declare?@user3?nvarchar(50)?
update?ST_User?set?@user3?=?Name?where?ID=1?
print?@user3
二、表、臨時表、表變量
--創(chuàng)建臨時表1?
create?table?#DU_User1?
(?
[ID]?[int]??NOT?NULL,?
[Oid]?[int]?NOT?NULL,?
[Login]?[nvarchar](50)?NOT?NULL,?
[Rtx]?[nvarchar](4)?NOT?NULL,?
[Name]?[nvarchar](5)?NOT?NULL,?
[Password]?[nvarchar](max)?NULL,?
[State]?[nvarchar](8)?NOT?NULL
);?
--向臨時表1插入一條記錄?
insert?into?#DU_User1?(ID,Oid,[Login],Rtx,Name,[Password],State)?values?(100,2,'LS','0000','臨時','321','特殊');?
--從ST_User查詢數(shù)據(jù),填充至新生成的臨時表?
select?*?into?#DU_User2?from?ST_User?where?ID8?
--查詢并聯(lián)合兩臨時表?
select?*?from?#DU_User2?where?ID3?union?select?*?from?#DU_User1?
--刪除兩臨時表?
drop?table?#DU_User1?
drop?table?#DU_User2
--創(chuàng)建臨時表?
CREATE?TABLE?#t?
(?
[ID]?[int]?NOT?NULL,?
[Oid]?[int]?NOT?NULL,?
[Login]?[nvarchar](50)?NOT?NULL,?
[Rtx]?[nvarchar](4)?NOT?NULL,?
[Name]?[nvarchar](5)?NOT?NULL,?
[Password]?[nvarchar](max)?NULL,?
[State]?[nvarchar](8)?NOT?NULL,?
)?
--將查詢結(jié)果集(多條數(shù)據(jù))插入臨時表?
insert?into?#t?select?*?from?ST_User?
--不能這樣插入?
--select?*?into?#t?from?dbo.ST_User?
--添加一列,為int型自增長子段?
alter?table?#t?add?[myid]?int?NOT?NULL?IDENTITY(1,1)?
--添加一列,默認(rèn)填充全球唯一標(biāo)識?
alter?table?#t?add?[myid1]?uniqueidentifier?NOT?NULL?default(newid())?
select?*?from?#t?
drop?table?#t
--給查詢結(jié)果集增加自增長列?
--無主鍵時:?
select?IDENTITY(int,1,1)as?ID,?Name,[Login],[Password]?into?#t?from?ST_User?
select?*?from?#t?
--有主鍵時:?
select?(select?SUM(1)?from?ST_User?where?ID=?a.ID)?as?myID,*?from?ST_User?a?order?by?myID
--定義表變量?
declare?@t?table
(?
id?int?not?null,?
msg?nvarchar(50)?null
)?
insert?into?@t?values(1,'1')?
insert?into?@t?values(2,'2')?
select?*?from?@t
三、循環(huán)
--while循環(huán)計(jì)算1到100的和?
declare?@a?int
declare?@sum?int
set?@a=1?
set?@sum=0?
while?@a=100?
begin
set?@sum+=@a?
set?@a+=1?
end
print?@sum
四、條件語句
--if,else條件分支?
if(1+1=2)?
begin
print?'對'
end
else
begin
print?'錯'
end
--when?then條件分支?
declare?@today?int
declare?@week?nvarchar(3)?
set?@today=3?
set?@week=case
when?@today=1?then?'星期一'
when?@today=2?then?'星期二'
when?@today=3?then?'星期三'
when?@today=4?then?'星期四'
when?@today=5?then?'星期五'
when?@today=6?then?'星期六'
when?@today=7?then?'星期日'
else?'值錯誤'
end
print?@week
五、游標(biāo)
declare?@ID?int
declare?@Oid?int
declare?@Login?varchar(50)?
--定義一個游標(biāo)?
declare?user_cur?cursor?for?select?ID,Oid,[Login]?from?ST_User?
--打開游標(biāo)?
open?user_cur?
while?@@fetch_status=0?
begin
--讀取游標(biāo)?
fetch?next?from?user_cur?into?@ID,@Oid,@Login?
print?@ID?
--print?@Login?
end
close?user_cur?
--摧毀游標(biāo)?
deallocate?user_cur
六、觸發(fā)器
觸發(fā)器中的臨時表:
Inserted?
存放進(jìn)行insert和update?操作后的數(shù)據(jù)?
Deleted?
存放進(jìn)行delete?和update操作前的數(shù)據(jù)
--創(chuàng)建觸發(fā)器?
Create?trigger?User_OnUpdate??
On?ST_User??
for?Update?
As?
declare?@msg?nvarchar(50)?
--@msg記錄修改情況?
select?@msg?=?N'姓名從“'?+?Deleted.Name?+?N'”修改為“'?+?Inserted.Name?+?'”'?from?Inserted,Deleted?
--插入日志表?
insert?into?[LOG](MSG)values(@msg)?
--刪除觸發(fā)器?
drop?trigger?User_OnUpdate
七、存儲過程
--創(chuàng)建帶output參數(shù)的存儲過程?
CREATE?PROCEDURE?PR_Sum?
@a?int,?
@b?int,?
@sum?int?output
AS
BEGIN
set?@sum=@a+@b?
END
--創(chuàng)建Return返回值存儲過程?
CREATE?PROCEDURE?PR_Sum2?
@a?int,?
@b?int
AS
BEGIN
Return?@a+@b?
END
--執(zhí)行存儲過程獲取output型返回值?
declare?@mysum?int
execute?PR_Sum?1,2,@mysum?output
print?@mysum?
--執(zhí)行存儲過程獲取Return型返回值?
declare?@mysum2?int
execute?@mysum2=?PR_Sum2?1,2?
print?@mysum2
八、自定義函數(shù)
函數(shù)的分類:
1)標(biāo)量值函數(shù)
2)表值函數(shù)
a:內(nèi)聯(lián)表值函數(shù)
b:多語句表值函數(shù)
3)系統(tǒng)函數(shù)
--新建標(biāo)量值函數(shù)?
create?function?FUNC_Sum1?
(?
@a?int,?
@b?int
)?
returns?int
as
begin
return?@a+@b?
end
--新建內(nèi)聯(lián)表值函數(shù)?
create?function?FUNC_UserTab_1?
(?
@myId?int
)?
returns?table
as
return?(select?*?from?ST_User?where?ID@myId)?
--新建多語句表值函數(shù)?
create?function?FUNC_UserTab_2?
(?
@myId?int
)?
returns?@t?table
(?
[ID]?[int]?NOT?NULL,?
[Oid]?[int]?NOT?NULL,?
[Login]?[nvarchar](50)?NOT?NULL,?
[Rtx]?[nvarchar](4)?NOT?NULL,?
[Name]?[nvarchar](5)?NOT?NULL,?
[Password]?[nvarchar](max)?NULL,?
[State]?[nvarchar](8)?NOT?NULL
)?
as
begin
insert?into?@t?select?*?from?ST_User?where?ID@myId?
return
end
--調(diào)用表值函數(shù)?
select?*?from?dbo.FUNC_UserTab_1(15)?
--調(diào)用標(biāo)量值函數(shù)?
declare?@s?int
set?@s=dbo.FUNC_Sum1(100,50)?
print?@s?
--刪除標(biāo)量值函數(shù)?
drop?function?FUNC_Sum1
談?wù)勛远x函數(shù)與存儲過程的區(qū)別:
一、自定義函數(shù):
1.?可以返回表變量
2.?限制頗多,包括
不能使用output參數(shù);
不能用臨時表;
函數(shù)內(nèi)部的操作不能影響到外部環(huán)境;
不能通過select返回結(jié)果集;
不能update,delete,數(shù)據(jù)庫表;
3.?必須return?一個標(biāo)量值或表變量
自定義函數(shù)一般用在復(fù)用度高,功能簡單單一,爭對性強(qiáng)的地方。
二、存儲過程
1.?不能返回表變量
2.?限制少,可以執(zhí)行對數(shù)據(jù)庫表的操作,可以返回?cái)?shù)據(jù)集
3.?可以return一個標(biāo)量值,也可以省略return
存儲過程一般用在實(shí)現(xiàn)復(fù)雜的功能,數(shù)據(jù)操縱方面。
卸載SQL Server 2008 R2
1。首先在控制面板里卸載sqlserver和相關(guān)的依賴項(xiàng)。
2。然后重啟電腦,以防有些組件駐留內(nèi)存無法刪除。
3。使用Windows Install Clean Up 工具清理其他垃圾
4。刪除C:\Program?Files\Microsoft?SQL?Server下的工作目錄。
5。刪除C:\Program?Files?(x86)\Microsoft?SQL?Server下的工作目錄。
6。打開注冊表編輯器(開始→運(yùn)行→regedit→確定)
然后找到下面的文件夾,刪除掉:
6.1。HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server
6.2。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server和
Microsoft SQL Server開頭的一并刪除
7。清理其他包含Microsoft?SQL?Server的目錄。如
8。如果不能正常安裝SQL Server的話,請盡量重新安裝系統(tǒng)。這是代價最小的方法。