que je suis en train de modifier une dimension de type 2 en utilisant les éléments suivants (long) instruction SQL:suivi ce que la commande merge et sa sortie ne
INSERT INTO AtlasDataWarehouseReports.District
(
Col01,
Col02,
Col03,
Col04,
Col05,
Col06,
Col07,
Col08,
Col09,
Col10,
StartDateTime,
EndDateTime
)
SELECT
Col01,
Col02,
Col03,
Col04,
Col05,
Col06,
Col07,
Col08,
Col09,
Col10,
CONVERT (DATETIME, CONVERT (Varchar, GetDate(), 101)) AS StartDateTime,
NULL AS EndDateTime
FROM
(
MERGE AtlasDataWarehouseReports.District AS MergeTarget
USING Staging.District as MergeSource
ON MergeTarget.Col01 = MergeSource.Col01
AND MergeTarget.EndDateTime IS NULL
WHEN MATCHED
AND (
MergeTarget.Col02 <> MergeSource.Col02
OR MergeTarget.Col05 <> MergeSource.Col05
)
THEN
UPDATE SET MergeTarget.EndDateTime = CONVERT (DATETIME, CONVERT (Varchar, GetDate(), 101))
WHEN NOT MATCHED
THEN
INSERT
(
Col01,
Col02,
Col03,
Col04,
Col05,
Col06,
Col07,
Col08,
Col09,
Col10,
StartDateTime,
EndDateTime
)
VALUES
(
MergeSource.Col01,
MergeSource.Col02,
MergeSource.Col03,
MergeSource.Col04,
MergeSource.Col05,
MergeSource.Col06,
MergeSource.Col07,
MergeSource.Col08,
MergeSource.Col09,
MergeSource.Col10,
CONVERT (DATETIME, CONVERT (Varchar, GetDate(), 101)),
NULL
)
OUTPUT $Action as MergeAction, MergeSource.*
) AS MergeOutput
WHERE 1=1
AND MergeOutput.MergeAction = 'UPDATE';
Je courais cela comme une partie de l'ETL qui charge mon entrepôt de données . Ce que je veux construire est un système de journalisation détaillé qui peut suivre tous les changements dans une table/fichier de journal etc.
Tout le travail qui est réellement fait pendant le MERGE et la SORTIE utilisée dans l'INSERT, est derrière le scènes. Je veux suivre toutes les colonnes et les valeurs qui ont participé à cette requête.
Y a-t-il un moyen pour moi de capturer ces données?
@John Sansom: Tu m'as manqué il y a quelques semaines! http://stackoverflow.com/questions/1132078/upsert-in-ssis. Maintenant, j'ai construit le tout dans les procédures stockées appelées à partir de SSIS. J'ai exécuté le magicien. La seule chose que je n'aimais pas était la maintenabilité du paquetage SSIS. Il utilise des commandes OLEDB pour cela, et Microsoft a bâclé royalement le nom de paramètre pour l'objet de commande OLEDB avec Param_0, Param_1. J'ai demandé à ce sujet ici http://stackoverflow.com/questions/1137355/alias-parameters-in-ssis. Jusqu'à présent, j'ai 15 Dimensions Type2 Dimensions qui utilisent MERGE. –