zoukankan      html  css  js  c++  java
  • 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

    */



  • 相关阅读:
    扫描与爆破
    复习与PKI技术

    IIS与FTP
    IIS与WEB
    DNS部署与安全
    DHCP服务部署与安全
    文件共享服务CIFS
    NTFS权限
    关于操作运算符的一些小练习
  • 原文地址:https://www.cnblogs.com/ringwang/p/994828.html
Copyright © 2011-2022 走看看