zoukankan      html  css  js  c++  java
  • NopCommerce上二次开发 触发器记录

    最近要在NopCommerce上二次开发。

    开发也就算了,该项目的架构设计很好,但性能不可谓不低。

    扯远了,为了保持项目以后升级顺利,开次开发不允许在原项目基础上大改,只能以插件形式开发……

    因一个功能,不好改代码,所以在数据层用触发器实现。代码记录在此

      1 USE [NopCommerce]
      2 GO
      3 /****** Object:  Trigger [dbo].[InsertAffiliate]    Script Date: 2014/7/22 11:10:03 ******/
      4 SET ANSI_NULLS ON
      5 GO
      6 SET QUOTED_IDENTIFIER ON
      7 GO
      8 
      9 
     10 -- =============================================
     11 -- Author:        崔大鹏
     12 -- Create date: 2014.7.21
     13 -- Description:    <Description,,> 需要去affiate 的外键关联
     14 -- =============================================
     15 ALTER TRIGGER [dbo].[InsertAffiliate]
     16    ON  [dbo].[Customer]
     17    AFTER INSERT,UPDATE
     18 AS 
     19 
     20 BEGIN
     21 
     22 
     23 declare @CustomUserName nvarchar(1000)
     24 select @CustomUserName=inserted.Username from inserted
     25  If (@CustomUserName is not null) 
     26   begin 
     27    -- print('用户名不为空(实注册用户,临时用户不进)
     28 Declare @CustomId int
     29 declare @errno int 
     30 DECLARE @AddressId  int
     31 DECLARE @AffiliateId  int
     32 
     33 DECLARE @User_FirstName  nvarchar(100)
     34 DECLARE @User_LastName  nvarchar(100)
     35 DECLARE @Company  nvarchar(100)
     36 
     37 select @CustomId=inserted.Id from inserted 
     38 
     39 
     40  -- print('不存在关联AFF)
     41    if not exists(select 1 from   P_CustomId_AffiliateId P WHERE P.Id=@CustomId)
     42    BEGIN
     43 
     44    Begin TransAction  
     45 
     46    select @AddressId from  CustomerAddresses as Ca WHERE CA.Customer_Id=@CustomId
     47  -- print('关联CustomerAddresses 表 查出addressge表的ID
     48 
     49  -- print('如果没查到,插入一条。ADDRESS 并插入一条关联。
     50 if(@AddressId is null)
     51 begin
     52 
     53 --with sr as( select * from GenericAttribute with nolock
     54 --                        where EntityId=@CustomId and KeyGroup='Customer'
     55 --                        )
     56 --select @User_FirstName=Value from sr
     57 --where sr.[Key]='FirstName'
     58 
     59 --select @User_LastName=Value from sr 
     60 
     61 with sr as(select  case [Key] when 'FirstName' THEN VALUE   END  AS 'FirstName',case [Key] when 'LastName' THEN VALUE   END  AS 'LastName',  case [Key] when 'Company' THEN VALUE   END  AS 'Company'
     62    FROM [NopCommerce].[dbo].[GenericAttribute]
     63   where [EntityId]=@CustomId)
     64 
     65   select @User_FirstName=STUFF((SELECT ',' + FirstName  
     66          FROM sr AS G2 FOR XML PATH('')), 1, 1, '') ,@User_LastName=STUFF((SELECT ',' + LastName  
     67          FROM sr AS G2 FOR XML PATH('')), 1, 1, ''),@Company= STUFF((SELECT ',' + Company  
     68          FROM sr AS G2 FOR XML PATH('')), 1, 1, '')
     69 
     70 INSERT INTO [dbo].[Address]
     71            ([FirstName]
     72            ,[LastName]
     73            ,[Email]
     74            ,[Company]
     75            ,[CountryId]
     76            ,[StateProvinceId]
     77            ,[City]
     78            ,[Address1]
     79            ,[Address2]
     80            ,[ZipPostalCode]
     81            ,[PhoneNumber]
     82            ,[FaxNumber]
     83            ,[CreatedOnUtc])
     84      VALUES
     85            (@User_FirstName
     86            ,@User_LastName
     87            ,@CustomUserName
     88            ,@Company
     89            ,NULL
     90            ,NULL
     91            ,''
     92            ,''
     93            ,''
     94            ,''
     95            ,''
     96            ,''
     97            ,GETDATE())
     98 SELECT @AddressId=@@IDENTITY 
     99 
    100 set @errno=@errno+@@error
    101 
    102 INSERT INTO [dbo].[CustomerAddresses]
    103            ([Customer_Id]
    104            ,[Address_Id])
    105      VALUES
    106            (@CustomId
    107            ,@AddressId)
    108 set @errno=@errno+@@error
    109 end
    110 
    111  -- print('插入Affiliate 以上对ADDRESS表的处理,因为,AFF表有外键关联,ADDRESS无数据,不能INSERT
    112 insert into Affiliate  ([AddressId]
    113            ,[Deleted]
    114            ,[Active])
    115            values(@AddressId,0,1)
    116 SELECT @AffiliateId=@@IDENTITY 
    117 
    118 set @errno=@errno+@@error
    119 -- print('插入P_CustomId_AffiliateId
    120 insert into P_CustomId_AffiliateId
    121            values(@CustomId,@AffiliateId)
    122 
    123 set @errno=@errno+@@error
    124  If @errno>0 
    125   begin 
    126    -- print('事务处理失败,回滚事务!')
    127    rollback TransAction 
    128   end 
    129  Else
    130   Begin 
    131    -- print('事务处理成功,提交事务!')
    132    Commit TransAction
    133   End 
    134 
    135     -- SET NOCOUNT ON added to prevent extra result sets from
    136     -- interfering with SELECT statements.
    137     SET NOCOUNT ON;
    138     -- Insert statements for trigger here
    139 
    140 
    141 
    142   end 
    143 
    144    END  
    145    
    146 
    147 
    148 END
  • 相关阅读:
    我的浏览器收藏夹分类
    我的浏览器收藏夹分类
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/3860111.html
Copyright © 2011-2022 走看看