1

Je souhaite développer une orchestration BizTalk. Ce qui devrait insérer plusieurs enregistrements dans plusieurs tables de base de données et récupérer les enregistrements insérés à partir de plusieurs tables de base de données, dans une seule instance d'orchestration. Pour cette exigence, je suis en mesure d'insérer les données dans une instance, mais voir des difficultés à récupérer les données insérées pour cette instance, car tous les enregistrements ont des valeurs uniques pour chaque enregistrement. Pour ma situation, je devrais utiliser des procédures stockées, pour appliquer une autre logique métier. J'ai donc 2 méthodes différentes en utilisant "Wcf_Custom Adapter Feature" en appelant des procédures stockées, comme indiqué ci-dessous.Quelle est la meilleure pratique pour insérer plusieurs enregistrements dans la base de données et obtenir plusieurs enregistrements de la base de données dans une seule instance à l'aide de BizTalk?

-> Method1
Je dois développer une procédure stockée qui prend LoadDate (« 12/05/2016 10: 11: 22,147 ») en tant que paramètre avec les valeurs et l'insertion il prendra soin d'insérer la enregistrements pour cette instance, en conservant le LoadDate donné. Ensuite, il appelle immédiatement la procédure Get stored, qui prend comme paramètre le LoadDate ("2016-05-12 10: 11: 22.147"), puis récupère les enregistrements récemment insérés à partir de la base de données en fonction de la valeur LoadDate.

Je sais, la récupération des données à partir d'une valeur de date à partir du serveur SQL est une mauvaise pratique et il donnera aussi des problèmes de performance.

-> Method2
Je vais concevoir les tables à insérer, avec le nom de la colonne de type de données bool « Nouveau » et valeur 0 ou 1. Je vais développer une insertion procédure stockée, qui insère les données par donnant la valeur de la colonne "Nouveau" comme "1". Ensuite, il appelle immédiatement la procédure Get stored, qui ne prend aucun paramètre, puis récupère les enregistrements récemment insérés qui ont l'indicateur de colonne "New" "1" dans les tables DB. Une fois qu'il récupère les données, il met à jour la valeur de la colonne "Nouveau" sur "0".

Je préfère ce method2. Mais, avons-nous une meilleure option?

+0

Y at-il une raison pour toute cette complication? Vous pouvez utiliser les paramètres de valeur de table pour passer tout à un SP et ensuite faire une insertion directe dans les tables. Vous pouvez également renvoyer des colonnes de type Valeur de table. En outre, il n'y a rien de mal à récupérer des données basées sur une date. –

Répondre

0

Je pense que votre procédure stockée peut ressembler à ceci:

create procedure myProc 
@a int, @b varchar(100) 
as 
insert myTable(a,b,c) 
OUTPUT inserted.* --this line 
select a,b,c 
from somewhere 
where [email protected] and [email protected] 
0

Comme @ caleçon-305 mentionné dans son commentaire. Vous devez utiliser la valeur de table param dans votre sp. et assembler toutes vos données dans l'orchestration puis faire un appel à ce sp.

Un échantillon sp peut, comme ci-dessous:

CREATE TYPE [dbo].[SampleDataTable_Type] AS TABLE(
    [ID] [int] NOT NULL, 
    [Name] [varchar](50) NOT NULL, 
    PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) 
) 

GO 

CREATE PROCEDURE [dbo].[sp_InsertSampleTableData] 
(
    @LoadDate DATETIME, 
    @data [SampleDataTable_Type] READONLY 
) 
AS 
BEGIN 
    SET NOCOUNT ON 

    INSERT INTO your_table(id, name,) 
    SELECT id, name FROM @data; 

    --Do whatever you want 

    SET NOCOUNT OFF 
END 

GO