SQL學習筆記之存儲過程的編寫

今天寫幾個存儲過程,覺得有這個必要記錄下來,方便以后忘了也好有個備份,都很簡單,高手可以不用看的。

一、記錄的插入

--region?[dbo].[InsertArchive]

------------------------------------------------------------------------------------------------------------------------
--?Generated?By:???wangzeng?using?CodeSmith?4.0.0.0
--?Template:???????StoredProcedures.cst
--?Procedure?Name:?[dbo].[InsertArchive]
--?Date?Generated:?2007年11月28日
------------------------------------------------------------------------------------------------------------------------

--插入檔案記錄

ALTER?PROCEDURE?[dbo].[InsertArchive]
????@Name?varchar(
50),
????@Sex?
int,
????@PostID?
int,
????@OrgID?
int,
????@WorkTypeID?varchar(
20),
????@ArchivesID?
int?OUTPUT
AS

--SET?NOCOUNT?ON

INSERT?INTO?[dbo].[Archives]?(
????[Name],
????[Sex],
????[PostID],
????[OrgID],
????[WorkTypeID]
)?VALUES?(
????@Name,
????@Sex,
????@PostID,
????@OrgID,
????@WorkTypeID
)

SET?@ArchivesID?
=?SCOPE_IDENTITY()

--endregion


二、動態查詢,這個是由codesmit生成的,然后稍微改了點,條件可以任意組合
--動態查詢定單
ALTER?PROCEDURE?[dbo].[SelectOrdersDynamic]
????@WhereCondition?nvarchar(
500),
????@OrderByExpression?nvarchar(
250)?=?NULL
AS

SET?NOCOUNT?ON
SET?TRANSACTION?ISOLATION?LEVEL?READ?COMMITTED

DECLARE?@SQL?nvarchar(
3250)

SET?@SQL?
=?'
SELECT
????[ID],
????[OrderID],
????Orders.SupplierCode,
????SupplierName,
????
''AddDate''=case?when?Orders.AddDate<>''1900-1-1''?then
????????????????????????????convert(nvarchar,year(Orders.AddDate))
+''-''+convert(nvarchar,month(Orders.AddDate))+''-''+convert(nvarchar,day(Orders.AddDate))
??????????????????????
else??''''
??????????????????????end,
?????
''ClaimDate''=case?when?ClaimDate<>''1900-1-1''?then
????????????????????????????convert(nvarchar,year(ClaimDate))
+''-''+convert(nvarchar,month(ClaimDate))+''-''+convert(nvarchar,day(ClaimDate))
????????????????????????
else?''''
????????????????????????end,
????
''FactDate''=case??when?FactDate<>''1900-1-1''?then?convert(nvarchar,year(FactDate))+''-''+convert(nvarchar,month(FactDate))+''-''+convert(nvarchar,day(FactDate))
???????????????????????
else??''''?????????????????????
??????????????????????end,
????[Lister],
????[Assessor],
????[Validate],
????[Auditing],
????[Perform],
????[IsClose],
????
''ValidateState''=case?
????????????????????????when?Validate
=1?then?''''
????????????????????????when?Validate
=0?then?''''
????????????????????end,
????
''AuditingState''=case?
????????????????????when?Auditing
=1?then?''''
????????????????????when?Auditing
=0?then?''''
????????????????????end,
????
''PerformState''=case?
????????????????????when?Perform
=0?then?''未執行''
????????????????????when?Perform
=1?then?''執行中''
????????????????????when?Perform
=2?then?''執行完成''
????????????????end,
????
''IsCloseState''=case
????????????????when?IsClose
=1?then?''關閉''
????????????????when?IsClose
=0?then?''正常''
????????????????end,
????
''ValidateUrl''=case?
????????????????????????when?Validate
=0?then?''OrderDetail.aspx?OrderID=''+OrderID
????????????????????????
else?''''
????????????????????end,
????
''ValidateCss''=case?
????????????????????????when?Validate
=0?then?''bluelink''
????????????????????????
else?''nolink''
????????????????????end,
????
''ShipmentUrl''=case?
????????????????????????when?Perform
=1?then?''Shipment.aspx?OrderID=''+OrderID
????????????????????????
else?''''
????????????????????end,
????
''ShipmentCss''=case?
????????????????????????when?Perform
=1?then?''bluelink''
????????????????????????
else?''nolink''
????????????????????end,
????SupplierName,
??
0?as?''TotalMaterialNum'',
??
0?as?????''LackMaterialNum'',
??
0.0?as?''TotalMoney'',
??PayMode,
??Remark,
??Orders.OtherValue
FROM
????Orders?left?join?Supplier?on?Orders.SupplierCode
=Supplier.SupplierCode
WHERE
????
'?+?@WhereCondition

IF?@OrderByExpression?IS?NOT?NULL?AND?LEN(@OrderByExpression)?
>?0
BEGIN
????SET?@SQL?
=?@SQL?+?'
ORDER?BY
????
'?+?'ID?desc'--@OrderByExpression
END

EXEC?sp_executesql?@SQL

三、修改記錄,這個存儲過程這么寫主要是為了修改的時候方便,因為如果你不要修改的地方就不要傳參數,傳統的存儲過程是把原來的參數重傳一次,這個靈活點。
--修改定單信息
ALTER?PROCEDURE?[dbo].[UpdateOrder]
????@OrderID?varchar(
200),
????@SupplierCode?varchar(
200),
????@AddDate?datetime,
????@ClaimDate?datetime,
????@FactDate?datetime,
????@Lister?varchar(
50),
????@Assessor?varchar(
50),
????@Validate?
int,
????@Auditing?
int,
????@Perform?
int,
????@IsClose?
int,
????@PayMode?varchar(
50),
????@Remark?nvarchar(
500),
????@OtherValue?varchar(
50)
AS

--SET?NOCOUNT?ON


declare?@SQL?nvarchar(
1000)

set?@SQL='UPDATE?Orders?'

if(len(@SupplierCode)>0)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',SupplierCode='+''''+convert(varchar(200),@SupplierCode)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?SupplierCode='+''''+convert(varchar(200),@SupplierCode)+''''
????end
end
if(@AddDate<>'1900-1-1')
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',AddDate='+''''+convert(varchar,@AddDate)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?AddDate='+''''+convert(varchar,@AddDate)+''''
????end
end
if(@ClaimDate<>'1900-1-1')
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',ClaimDate='+''''+convert(varchar,@ClaimDate)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?ClaimDate='+''''+convert(varchar,@ClaimDate)+''''
????end
end
if(@FactDate<>'1900-1-1')
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',FactDate='+''''+convert(varchar,@FactDate)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?FactDate='+''''+convert(varchar,@FactDate)+''''
????end
end
if(len(@Lister)>0)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',Lister='+''''+convert(varchar,@Lister)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?Lister='+''''+convert(varchar,@Lister)+''''
????end
end
if(len(@Assessor)>0)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????
if?@Assessor='null'
????????begin
????????????
set?@Assessor=''
????????end
????????
set?@SQL=@SQL+',Assessor='+''''+convert(varchar,@Assessor)+''''
????end
????
else
????begin
????
if?@Assessor='null'
????????begin
????????????
set?@Assessor=''
????????end
????????
set?@SQL=@SQL+'?set?Assessor='+''''+convert(varchar,@Assessor)+''''
????end
end
if(cast(@Validate?as?int)>-1)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',Validate='+''''+convert(varchar,@Validate)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?Validate='+''''+convert(varchar,@Validate)+''''
????end
end
if(cast(@Auditing?as?int)>-1)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',Auditing='+''''+convert(varchar,@Auditing)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?Auditing='+''''+convert(varchar,@Auditing)+''''
????end
end
if(cast(@Perform?as?int)>-1)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',Perform='+''''+convert(varchar,@Perform)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?Perform='+''''+convert(varchar,@Perform)+''''
????end
end
if(cast(@IsClose?as?int)>-1)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',IsClose='+''''+convert(varchar,@IsClose)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?IsClose='+''''+convert(varchar,@IsClose)+''''
????end
end
if(len(@PayMode)>0)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',PayMode='+''''+convert(varchar,@PayMode)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?PayMode='+''''+convert(varchar,@PayMode)+''''
????end
end
if(len(convert(nvarchar,@Remark))>0)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',Remark='+''''+convert(nvarchar(500),@Remark)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?Remark='+''''+convert(nvarchar(500),@Remark)+''''
????end
????
--update?Orders?set?Remark=@Remark?where?OrderID=+''''+@OrderID+''''
end
if(len(@OtherValue)>0)
begin
????
if(len(@SQL)>len('UPDATE?Orders?set?'))
????begin
????????
set?@SQL=@SQL+',OtherValue='+''''+convert(varchar,@OtherValue)+''''
????end
????
else
????begin
????????
set?@SQL=@SQL+'?set?OtherValue='+''''+convert(varchar,@OtherValue)+''''
????end
end
set?@SQL=@SQL+'?where?OrderID='+''''+convert(nvarchar(200),@OrderID)+''''
print?@SQL
exec(@SQL)

if(len(@SupplierCode)>0)
begin
????update?Supplier?
set?LastUseDate=getdate()?where?SupplierCode=@SupplierCode????--沒有統計修改的次數,因為修改時經常是同一個供應商
end

/**//*
UPDATE?[dbo].[Orders]?SET
????[SupplierCode]?=?@SupplierCode,
????[AddDate]?=?@AddDate,
????[ClaimDate]=@ClaimDate,
????[FactDate]?=?@FactDate,
????[Lister]?=?@Lister,
????[Assessor]?=?@Assessor,
????[Validate]?=?@Validate,
????[Auditing]?=?@Auditing,
????[Perform]?=?@Perform
WHERE
????[OrderID]?=?@OrderID

*/



轉載于:https://www.cnblogs.com/ringwang/archive/2007/12/14/994828.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276983.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276983.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276983.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

應用安全-操作系統安全-漏洞修復整理

FTP弱密碼 將FTP服務器的密碼更改為強密碼 vi /etc/vsftpd/vsftpd.conf anonymous_enableNO #禁止匿名登錄 重啟ftp服務 Windows匿名用戶整改參考&#xff1a; https://www.jb51.net/article/135347.htm View CodeSSH弱密碼 修改ssh配置文件&#xff1a; 1.修改iptables 首先要…

【2.0】SpringBoot連接MySql 8.0的url設置

jdbc:mysql://localhost:3306/enterprise?useUnicodetrue&amp&useSSLfalse&amp&characterEncodingUTF-8&amp&serverTimezoneGMT%2B8

Java自定義JSlider UI

Java自定義JSlider UI JSlider作為Swing中提供的滑標組件&#xff0c; 以圖形方式在有界區間內通過移動滑塊來選擇值&#xff0c;滑塊可以顯示主刻度標記和次刻度標記。大量應用于如播放器中的音量設定等領域中。但是JSlider本身提供的UI樣式很單調&#xff0c;不足以滿足用戶的…

Chrome OS 云里霧里

昨天Google發布了ChromeOS&#xff0c;之前有牛人編譯了它的源碼并創建了虛擬機分享出來。具體的BT種子不記得了&#xff0c;有需要的可以搜索一下chromeos-image-999.999.32309.211410-a1.vmdk.bz2。看看哪還有種子可用。文件大概287M左右&#xff0c;解壓后大概7、8百M。當下…

C++基礎學習一(基礎之基礎)

開篇&#xff1a;做了這么多年的軟件&#xff0c;第一次使用博客的方式記錄學習過程&#xff0c;之前都是筆記本&#xff08;都有一摞了&#xff09;&#xff0c;因為之前一直從事的都是.NET的開發工作&#xff0c;對C知之甚少&#xff0c;但一直想了解C這門鼻祖級的語言&#…

二叉樹的遍歷方式

2019獨角獸企業重金招聘Python工程師標準>>> 二叉樹遍歷方式有三種&#xff1a;前序遍歷&#xff0c;中序遍歷&#xff0c;后序遍歷&#xff08;其實還有一個層序遍歷&#xff09; 使用兩種方式來實現三種遍歷&#xff1a; 1. 使用遞歸的方式實現 1&#xff09;&…

非常惡俗地分享一首歌曲(子陵·周郎顧)

歌詞 [hjp3]hjptypesong&player5&filehttp://file.hjbbs.com/ayi/share/mp3/zhoulanggu.mp3&backColor990000&frontColorddddff&autoStarttrue&showDownloadtrue&width310&height20[/hjp3]子陵周郎顧 綠綺輕拂剎那玄冰破&#xff0c; 九霄仙音…

that is why用法

釋義&#xff1a;這就是為什么&#xff0c;因此 Thats why I was getting married. ---《老友記》 第一季 第一集 這就是我為什么結婚的原因。 例句&#xff1a; Mr. Gorbachev, on the other hand, recognized that his sluggish and authoritarian bureaucracy was the worst…

阿里云超算集諦優化GPU異構并行性能:GROMACS

“集諦”是一款內置于阿里云彈性高性能計算(Elastic High Performance Computing&#xff0c;E-HPC)的云上性能監控與分析引擎&#xff0c;支持集群資源利用情況的實時監控和用戶作業運行情況的在線分析。對于采用GPU加速的異構計算應用場景&#xff0c;“集諦”除了監控節點ho…

日本常用網址

1.Yahoo&#xff01;Japan http://www.yahoo.co.jp 2.價格.com http://www.kakaku.com 購買商品前必看的網站&#xff0c;不僅僅是為了得到相對最低的價格信息&#xff0c;更重要的是獲取關于同類商品不同品牌型號的評價和比較。 3.樂天 http://www.rakuten.co.jp 日本最…

MySQl看這一篇就夠了

MySQl看這一篇就夠了 MySQL分享 一、數據庫結構 語句 DDL&#xff08;Data Definition Languages&#xff09;&#xff1a;數據定義語句&#xff0c;常用的語句關鍵字主要包括 create、drop、alter等操作表結構 DML&#xff08;Data Manipulation Language&#xff09;&#xf…

IDEA 實用功能Auto Import:自動優化導包(自動刪除、導入包)

JetBrains公司的intellij Idea堪稱JAVA編程界的蘋果&#xff0c;用戶體驗非常好 下面介紹一下IDEA的一個能顯著提升寫代碼效率的非常好用的功能設置—— Auto Import Auto Import的功能是可以幫助我們自動刪除無用的包Import(未被引用)&#xff0c;以及自動Import填充尚未導入的…

怎么看網站是否被黑防止網站被黑

2019獨角獸企業重金招聘Python工程師標準>>> 網站被黑&#xff0c;打開網站竟然跳轉到博cai網站上去了&#xff0c;一開始以為自己看錯了&#xff0c;多次從百度點擊自己網站進去&#xff0c;還是會跳轉到彩piao網站上&#xff0c;第一反應是自己的網站被黑了&#…

c#事務的使用、示例及注意事項

一、事務的介紹.NET Framework 開發員指南事務是一組組合成邏輯工作單元的操作&#xff0c;雖然系統中可能會出錯&#xff0c;但事務將控制和維護事務中每個操作的一致性和完整性。例如&#xff0c;在將資金從一個帳戶轉移到另一個帳戶的銀行應用中&#xff0c;一個帳戶將一定的…

鏡像服務器文件實時監控同步程序

這是為我們網站解決南北電信網通互聯互通問題而寫的一個程序。 優游中國(www.yooyocn.com)是一個大型旅游門戶網站&#xff0c;提供了資訊&#xff0c;視頻&#xff0c;圖片&#xff0c;博客&#xff0c;論壇等大數據量的業務內容。 為了使全國各地的網友都能夠快速訪問我們的網…

Nginx學習系列二Linux下Nginx實現負載均衡

關于在本地虛擬機(VMware 14)下安裝Linux同時安裝Nginx,請參考Nginx學習系列之搭建環境 1、啟動Nginx 在Nginx安裝成功的前提下,啟動Nginx 已root模式登陸(權限需要),接著找到Nginx的安裝目錄,啟動Nginx,并且指定Nginx啟動所需的配置文件,該文件也在Nginx的安裝目錄下. 2、查看…

FastCGI中文規范

http://fuzhong1983.blog.163.com/blog/static/1684705201051002951763/ . 介紹 FastCGI是對CGI的開放的擴展&#xff0c;它為所有因特網應用提供高性能&#xff0c;且沒有Web服務器API的缺點&#xff08;penalty&#xff09;。 本規范具有有限的&#xff08;narrow&#xff09…

設計模式初學者系列-策略模式 -------為什么總是繼承

設計模式初學者系列&#xff0d;策略模式 -------為什么總是繼承 模板方法的延續 這篇稿子是基于我的前一篇模板方法設計模式之上演繹的&#xff0c;如果沒有閱讀請點擊這里查看&#xff0c;以了解這篇稿子的上下文。 在模板方法設計模式里我舉了一個例子&#xff1a;教育部…

紅米airdots掉了怎么查找_紅米K30 Pro 榮耀V30pro 這兩款手機該怎么選呢?

點擊?玩機數碼君?關注我&#xff0c;加★星標★你好 我是歲月神偷昨天可以說是小米拍手稱快的一天&#xff0c;紅米K30 Pro以2999的超低價成為目前最便宜的驍龍865旗艦&#xff0c;讓友商拍馬難追。友商明眼人都知道說的華為&#xff0c;怎么感覺小米每次發布會也替華為宣傳了…

返回一個循環整數組最大子數組和

任務要求&#xff1a; 1、輸入一個整形數組&#xff0c;數組里有正數也有負數。 2、數組中連續的一個或多個整數組成一個子數組&#xff0c;每個子數組都有一個和。 3、如果數組A[0]……A[j-1]首尾相鄰&#xff0c;允許A[i-1]&#xff0c; …… A[n-1]&#xff0c; A[0]……A…