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.mzph.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 首先要…

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。当下…

二叉树的遍历方式

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…

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;一个帐户将一定的…

Nginx学习系列二Linux下Nginx实现负载均衡

关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境 1、启动Nginx 在Nginx安装成功的前提下,启动Nginx 已root模式登陆(权限需要),接着找到Nginx的安装目录,启动Nginx,并且指定Nginx启动所需的配置文件,该文件也在Nginx的安装目录下. 2、查看…

设计模式初学者系列-策略模式 -------为什么总是继承

设计模式初学者系列&#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…

4K 海思 联咏 芯片_老电视也有春天,换装海美迪4K电视盒子H7 Plus

写在前面YALL&#xff0c;大家好&#xff0c;我是老炮儿许老板。疫情进入六月逐渐好转&#xff0c;各级各类学校相继开学&#xff0c;年前给儿子报的托班也终于迎来了开学&#xff0c;平日里帮忙照看儿子的爷爷奶奶也终于得到了解放。现在白天有大把大把的时间来追剧看电视&…

WCF从理论到实践(4):路在何方

本文的出发点 通过阅读本文&#xff0c;您能了解以下知识&#xff1a; Address是什么&#xff1f; Address的组成&#xff1f; 如何在配置文件中指定Address? 如何通过编程方式设置Address? Address有什么特殊应用&#xff1f; 本文适合的读者 适合WCF初学者&#xff…

office 2007图标_微软Office 365桌面版新图标开始测试

IT之家3月1日消息 此前&#xff0c;微软公布了全新的Office图标&#xff0c;微软Office 365在线网页版在2月15日开始已经全面更新新版图标&#xff0c;而桌面版Office 365现在也陆续开始测试新版图标。目前微软Office Dogfood通道上推送的开发者预览版本已经在2月27日开始测试O…

【动态规划BFS】相遇

这是我第一次模拟题测试点全部AC。。。 同机房的DALAO都用的BFS 然而我用的DP&#xff08;其实不会BFS&#xff09; 话不多说&#xff0c;上题&#xff01; &#xff08;灰常详细&#xff09;DP解法&#xff1a; 重点还是状态转移方程式的推导 1个点i要么是后面的位置i-1往前走…

五个思路,教你如何建立金融业的数据分析管理模型

说起银行、保险、股票投资这样的金融行业&#xff0c;很多人都认为它们是依靠数据驱动的企业&#xff0c;毕竟大数据的诞生本来就是为了金融信息流通而服务的&#xff0c;但在我身边很多搞证券、投资的朋友看来&#xff0c;事实却并非如此。 真正在金融行业做数据分析的人&…