Ich habe herausgefunden, wie man es mit den Standardbefehlen von FitSharps Version von DbFit macht.
Dieses Beispiel wird mit einer SQL Server Datenbank ausgeführt. Oracle hat eine ähnliche Syntax für seine MERGE-Anweisung, obwohl ich nicht weiß, wie es mit temporären Tabellen umgeht. MySQL hat keine MERGE-Anweisung; Es hat einen Nicht-Standard-Befehl, der dasselbe erreicht. Es unterstützt auch temporäre Tabellen, aber ich bin nicht vertraut mit der Syntax für temporäre Tabellen MySql.
Hier ist die Definition einer Zieltabelle Ich möchte Daten in fusionieren:
CREATE TABLE Student
(
[Name] NVARCHAR(200),
DateOfBirth DATETIME,
Notes NVARCHAR(1000)
);
Hier ist der DbFit Flow-Modus-Seite, die Daten in sie fusionieren:
!| Execute | CREATE TABLE #MergeSource ([Name] NVARCHAR(200), DateOfBirth DATETIME, Notes NVARCHAR(1000)); |
!| Insert | tempdb.dbo.#MergeSource |
| Name | DateOfBirth | Notes |
| Jane Smith | 1997-09-24 | These are some notes |
| John Doe | 2000-04-06 | Other notes |
!| Execute | !-
MERGE INTO Student AS target
USING
(
SELECT [Name], [DateOfBirth], [Notes]
FROM #MergeSource
) AS source
ON target.[Name] = source.[Name]
WHEN MATCHED THEN
UPDATE
SET [DateOfBirth] = source.[DateOfBirth],
[Notes] = source.[Notes]
WHEN NOT MATCHED BY TARGET THEN
INSERT ([Name], [DateOfBirth], [Notes])
VALUES (source.[Name], source.[DateOfBirth], source.[Notes]);
-! |
!| Query | SELECT [Name], DateOfBirth, Notes FROM Student; |
| Name | DateOfBirth | Notes |
| Jane Smith | 1997-09-24 | These are some notes |
| John Doe | 2000-04-06 | Other notes |
Zunächst wird eine temporäre Tabelle ist erstellt, um als Datenquelle für die MERGE zu dienen. Die zu meldenden Daten werden in die temporäre Tabelle eingefügt, und dann wird die MERGE-Anweisung ausgeführt. Der Query-Befehl am Ende wird für MERGE nicht benötigt, er wurde nur hinzugefügt, um zu überprüfen, ob die Zieltabelle korrekt aktualisiert wurde.
Beachten Sie, dass der Befehl Einfügen einen dreiteiligen Namen für die temporäre Tabelle mindestens in SQL Server verwenden muss.
exec sp_executesql N'select c.[name], TYPE_NAME(c.system_type_id) as [Type], c.max_length,
0 As is_output, 0 As is_cursor_ref, c.precision, c.scale
from tempdb. sys.columns c
where c.object_id = OBJECT_ID(@objname)
order by column_id',
N'@objname nvarchar(23)',
@objname=N'tempdb.dbo.#MergeSource'
Funktion Die OBJECT_ID wird die Objekt-ID einer temporären Tabelle nur zurück, wenn: Wenn der Befehl Einfügen gegen SQL Server ausgeführt wird, hinter den Kulissen es sys.columns fragt Spalteninformationen über den Tisch zu bekommen ist in eingefügt Der Tabellenname wird als dreiteiliger Name angegeben. Dies liegt daran, dass SQL Server immer temporäre Tabellen in der Tempdb-Datenbank erstellt und nicht die Datenbank, in der die temporäre Tabelle verwendet wird. Die OBJECT_ID-Funktion wird die Metadaten für die temporäre Tabelle nicht finden, es sei denn, es wird aufgefordert, in der Tempdb-Datenbank nach es zu suchen.