1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| USE [ZoneCustomerExchange]
GO
/****** Object: StoredProcedure [dbo].[SetDataCustomersCategory] Script Date: 08-06-17 10:47:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Description: Permet d'ajouter des catégories à un client
-- =============================================
ALTER PROCEDURE [dbo].[SetDataCustomersCategory]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @idFile int
DECLARE @NameFile varchar(50)
--Customers
DECLARE XmlData CURSOR FOR
SELECT
[dbo].[FilesXML].IDFilesXML,
[dbo].[FilesXML].NameFile
FROM [dbo].[FilesXML]
WHERE
[dbo].[FilesXML].Parite = 1
AND [dbo].[FilesXML].FKSource = 1
AND [dbo].[FilesXML].DateExplore IS NULL
AND [dbo].[FilesXML].Type = 'CatCustomers'
ORDER BY [dbo].[FilesXML].IDFilesXML
OPEN XmlData
FETCH XmlData INTO @idFile,@NameFile
WHILE @@FETCH_STATUS = 0
BEGIN
MERGE [dbo].[customers_category] AS target
USING (
SELECT
pref.value('(email/text())[1]', 'varchar(255)') as email,
sref.value('(text())[1]', 'varchar(50)') as CAT,
@NameFile as NameFile,
1 as IDSource,
[dbo].[customers].[idcustomer],
[dbo].[customers].[IDSourceIdAgency],
[dbo].[category].idcategory
FROM
FilesXML CROSS APPLY
XmlData.nodes('/Root/customer') AS customer(pref)
CROSS APPLY
pref.nodes('category/idcategory') AS CAT(sref)
INNER JOIN [dbo].[customers]
ON [dbo].[customers].email = pref.value('(email/text())[1]', 'varchar(255)')
INNER JOIN [dbo].[category]
ON [dbo].[category].IDSourceIdCategory = sref.value('(text())[1]', 'varchar(50)') AND [dbo].[category].IDSourceIdAgency = [dbo].[customers].[IDSourceIdAgency]
WHERE
FilesXML.IDFilesXML = @idFile
AND pref.value('(email/text())[1]', 'varchar(255)') <> 'NULL'
AND sref.value('(text())[1]', 'varchar(50)') <> 'NULL'
) as Source
ON (target.[Idcategory] = Source.idcategory AND target.Idcustomer = Source.idcustomer)
WHEN MATCHED THEN
UPDATE SET
target.NameFile = Source.NameFile
WHEN NOT MATCHED BY target THEN
INSERT (Idcategory,Idcustomer,NameFile )
VALUES (
Source.idcategory
,Source.idcustomer
,Source.NameFile
)
WHEN NOT MATCHED AND target.Idcustomer = Source.idcustomer THEN
DELETE
OUTPUT $action, inserted.*, deleted.*;
FETCH XmlData INTO @idFile, @NameFile
END
CLOSE XmlData
DEALLOCATE XmlData
END |
Partager