
[dbo].[BcImportCustomers]
create procedure [dbo].[BcImportCustomers]
@items BcCustomerImportItems readonly
as
begin
set nocount on
declare @AccountingCustomerIdHolder table
(
AccountingCustomerFid int not null,
BcId uniqueidentifier not null,
LastUpdatedInBcOn datetimeoffset not null
)
;with
MergeData as
(
select
BcCustomer.AccountingCustomerFid,
Items.BcId,
Items.[Name],
Items.CustomerNumber,
Items.Email,
Items.CreditLimit,
Items.LastModified
from @items Items
left outer join BcCustomer on Items.BcId = BcCustomer.BcId
)
merge AccountingCustomer with (tablock) using MergeData on
MergeData.AccountingCustomerFid = AccountingCustomer.AccountingCustomerId
when matched then update set
[Name] = MergeData.[Name],
CustomerNumber = MergeData.CustomerNumber,
Email = MergeData.Email,
OnHold = 0,
CreditLimit = MergeData.CreditLimit,
NoCreditFlag = 0
when not matched then
insert
(
[Name],
CustomerNumber,
Email,
OnHold,
CreditLimit,
NoCreditFlag
)
values
(
MergeData.[Name],
MergeData.CustomerNumber,
MergeData.Email,
0,
MergeData.CreditLimit,
0
)
output
inserted.AccountingCustomerId,
MergeData.BcId,
MergeData.LastModified
into @AccountingCustomerIdHolder;
declare @now datetimeoffset = sysdatetimeoffset()
;with
MergeData as
(
select
AccountingCustomerIdHolder.BcId,
AccountingCustomerIdHolder.AccountingCustomerFid,
LastUpdatedInBcOn
from @AccountingCustomerIdHolder as AccountingCustomerIdHolder
)
merge BcCustomer with (tablock) using MergeData on
MergeData.BcId = BcCustomer.BcId
when matched then update set
LastImportedOn = @now
when not matched then
insert
(
BcId,
AccountingCustomerFid,
CreatedOn,
LastImportedOn,
LastUpdatedInBcOn
)
values
(
MergeData.BcId,
MergeData.AccountingCustomerFid,
@now,
@now,
MergeData.LastUpdatedInBcOn
);
end
GO
GRANT EXECUTE ON [dbo].[BcImportCustomers] TO [MssExec]
GO