ringwang
    今天写几个存储过程,觉得有这个必要记录下来,方便以后忘了也好有个备份,都很简单,高手可以不用看的。

一、记录的插入

--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

*/



分类:

技术点:

相关文章:

  • 2021-10-20
  • 2021-11-01
  • 2021-10-20
  • 2021-10-20
  • 2021-11-22
  • 2021-11-03
  • 2021-11-03
  • 2021-11-01
猜你喜欢
  • 2021-10-20
  • 2021-10-20
  • 2021-11-01
  • 2021-10-20
  • 2021-10-20
  • 2021-12-17
  • 2021-11-01
相关资源
相似解决方案