1

Ich möchte eine BizTalk-Orchestrierung entwickeln. Dies sollte mehrere Datensätze in mehrere DB-Tabellen einfügen und eingefügte Datensätze aus mehreren DB-Tabellen in einer Instanz von Orchestrierung abrufen. Für diese Anforderung kann ich die Daten in einer Instanz einfügen, sehe aber Schwierigkeiten beim Abrufen der eingefügten Daten für diese Instanz, da alle Datensätze eindeutige Werte für jeden Datensatz aufweisen. Für meine Situation sollte ich gespeicherte Prozeduren verwenden, um eine andere Geschäftslogik anzuwenden. So habe ich 2 verschiedene Methoden, indem Sie "Wcf_Custom Adapter Composite Feature" durch den Aufruf von gespeicherten Prozeduren, wie unten angegeben.Was ist die beste Vorgehensweise, um mehrere Datensätze in DB einzufügen und mehrere Datensätze aus DB in Einzelinstanz mit BizTalk zu erhalten?

-> Method1
Ich habe eine gespeicherte Prozedur zu entwickeln, die LoadDate nimmt zusammen mit Einfügen von Werten („2016.05.12 10: 11 22,147“) als Parameter und es kümmert das Einführen Datensätze für diese Instanz, indem Sie das angegebene LoadDate beibehalten. Dann ruft es sofort die Prozedur Get stored auf, die den LoadDate ("2016-05-12 10: 11: 22.147") als Parameter verwendet, und ruft dann die zuletzt eingefügten Datensätze basierend auf dem LoadDate-Wert aus der Datenbank ab.

Ich weiß, Abrufen der Daten basierend auf einem Datumswert von SQL Server ist eine schlechte Praxis und es wird auch Leistungsprobleme geben.

-> Method2
Ich werde die Einfügen von Tabellen entwerfen, mit Bool Datentyp Spaltenname „Neu“ und Wert 0 oder 1 sein Ich werde ein Insert Stored Procedure, entwickeln, die die Daten einfügt durch Geben Sie den Wert "New" als "1". Dann ruft es sofort die Prozedur Get stored auf, die keine Parameter annimmt, dann ruft es die zuletzt eingefügten Datensätze ab, die den Spaltenwert "New" von DB-Tabellen haben. Sobald die Daten abgerufen sind, aktualisiert sie den Spaltenwert "New" auf "0".

Ich bevorzuge diese Methode2. Aber, haben wir bessere Wahl?

+0

Gibt es einen Grund für all diese Komplikation? Sie können Tabellenwertparameter verwenden, um alles an einen SP zu übergeben und dann eine direkte Einfügung in die Tabellen durchzuführen. Sie können auch Spalten vom Typ Tabellenwert zurückgeben. Außerdem ist es nicht falsch, Daten basierend auf einem Datum abzurufen. –

Antwort

0

Ich denke, Ihre gespeicherte Prozedur wie folgt aussehen:

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

Als @ johns-305 in seinem Kommentar erwähnt. Sie sollten Tabelle Wertparameter in Ihrem sp verwenden. und assemblieren Sie alle Ihre Daten in Orchestrierung, dann rufen Sie diese SP an.

Eine Probe sp kann unten mögen:

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