La copie des enregistrements se compose du fait de les transférer d'une table, la source, à une autre table, la cible. Vous pouvez copier tous les enregistrements de la source vers la cible. Vous pouvez sélectionner les colonnes à copier. Ou vous pouvez indiquer dans quelles conditions certains enregistrements pourraient être copiés. Pour copier tous les enregistrements d'une table à l'autre, la source et la cible doivent avoir le même nombre de colonnes, la même séquence de colonnes à l'égard de leurs types de données. Pour copier les enregistrements, démarrez une instruction INSERT ou INSERT INTO. Au lieu du mot-clé VALUES, créez une instruction SELECT qui implique la table source. Voici un exemple : USE Exercise ; GO INSERT INTO Employees SELECT * FROM Seasonals ; GO Une fois que cette instruction a été exécutée, tous les enregistrements issus de la table source sont copiés vers la table cible :
Si vous utilisez la formule ci-dessus, les enregistrements d'une colonne de la table source pourraient être copiés à la colonne correspondante de la table. Parfois, vous souhaitez fusionner les tables que ni l'une ni l'autre ne partagent la même séquence de colonnes ni ont le même nombre de colonnes. Considérez les tableaux suivants : USE Exercise ;
GO
CREATE TABLE Seasonals
(
ContractorCode nchar(10),
Wage money,
LastName nvarchar (20)
FirstName nvarchar (20)
);
INSERT INTO Seasonals
VALUES(N'86824', 12.84, N'Chance', N'Julie'),
(N'84005', 9.52, N'Kaihibu ', N'Ayinda ');
GO
CREATE TABLE Employees
(
EmplNbr nchar(10),
EmployeeName nvarchar(50),
HourlySalary d'argent
);
INSERT INTOEmployees
VALUES(N'22684', N'Ann Keans', 20.52),
(N '48157', Harrison N'Godwin ', 18,75),
(N '82476 ', journal N'Timothy', 18,75),
(N '15007 ', station N'Ralph', 18,75);
GO
Dans un tel cas, avant de copier les enregistrements, Vous devez analyser la table pour trouver un moyen de converger les enregistrements. Voici un exemple : USE Exercise1 ; GO INSERT INTO Employees SELECT ContractorCode, FirsName+''+LastName, Wage FROM Seasonals ; GO
De la même façon, vous pouvez définir une condition à suivre lors de la copie des enregistrements.
Imaginez que vous avez deux tables créées à des moments différents, par différentes personnes ou pour des différentes raisons générales. Vous pouvez avoir deux tables qui possèdent des enregistrements en double (le même enregistrement dans plus d'une table, par exemple le même numéro d'employé et le même nom dans deux tables). Vous pouvez avoir des enregistrements dans des tables différentes, mais certains de ces documents partagent la valeur d'un champ (vous pouvez avoir un employé A dans une table et un autre employé B dans une autre table mais tous les deux ont le même numéro d'employé avec des noms différents, peut-être lors de la fusion des deux compagnies). Comme une affectation, vous serez invité à combiner les enregistrements de ces tables en une seule.
La fusion d'un enregistrement consiste à insérer les enregistrements d'une table, dénommée la source, dans une autre table, dénommée la cible. Lorsque vous effectuez cette opération, vous aurez la possibilité de :
La formule primaire pour fusionner deux tables est la suivante : MERGE Table1 AS Target
USING Table2 AS Source
ON Table1.CommonField = Table2.CommonField
WHEN MATCHED Matched Options
THEN Match Operation (s)
WHEN NOT MATCHED BY TARGET Not Matched By Target Options
THEN Not Matched By Target operation (s)
WHEN NOT MATCHED BY TARGET Not Matched By Target Options
THEN Not Matched By Source Operation (s)
Vous commencez avec l'opérateur MERGE suivi de la table à laquelle les enregistrements seront ajoutés. Vous poursuivez avec l'opérateur USING suivi de la table à partir de laquelle les enregistrements seront restaurés. Vous devez spécifier la condition par laquelle les enregistrements doivent correspondre. Pour fusionner les enregistrements, chacune des tables doit être une colonne commune. Les colonnes n'ont pas besoin d'avoir le même nom, mais ils doivent être du même type (et taille). Pour fournir cette information, tapez ON suivi de la condition. Après avoir spécifié les tables et les enregistrements correspondant aux conditions, vous devez indiquer quoi faire si/quand un enregistrement de la condition source rencontre des enregistrements de la table cible.
Si vous faites une fusion à l'aide de la formule ci-dessus, après que la fusion ait été effectuée, vous ne sauriez pas le résultat, sauf si vous exécutez une nouvelle requête sur la table cible. Heureusement, vous pouvez demander le moteur de base de données pour afficher immédiatement un résumé de ce qui s'est passé. Pour ce faire, après la dernière instruction THEN, créez une expression OUTPUT MERGE Table1 AS Target
USING Table2 AS Source
ON Table1.CommonField = Table2.CommonField
WHEN MATCHED Options
THEN Match Operation (s)
WHEN NOT MATCHED BY TARGET Not Matched By Target Options
THEN Not Matched By Target Operation (s)
WHEN NOT MATCHED BY SOURCE Not Matched By Source Options
THEN Not Matched By Source Operation (s)
OUTPUT $action, DELETED | INSERTED | from_table_name.*
Pour obtenir un résumé des opérations fusionnantes, si vous effectuez un seul type d'opération, tapez OUTPUT, suivi de inserted.* ou deleted.*. Si vous effectuez différents types d'opérations, tapez OUTPUT, suivi de $action, suivi de inserted.* ou deleted.* ou tous les deux.
Un CTE (Coomon Table Expression) est une sélection temporaire ou une autre opération de requête d'enregistrements d'une ou de plusieurs tables. Utilisez-la pour vous faire une idée de ce que l'opération produirait si exécutée sur une table.Vous pouvez créer un CTE pour créer, sélectionner, fusionner ou supprimer des enregistrements. Il existe deux types d'expressions de table communes : récursives et non récursives.
La formule pour créer une expression de table commune (CTE) est la suivante : [WITH <common_table_expression > [,.. .n]]
<common_table_expression >:: =
expression_name [(column_name [,.. .n])]
AS
(CTE_query_definition)
Vous commencez avec le mot clé WITH suivi d'un nom pour le jeu temporaire. Le nom mus doit être différent de tout tableau qui sera utilisé dans l'expression de la CTE. Nous verrons plus tard les paramètres que vous pouvez ajouter après le nom. Après le nom, tapez AS suivi des parenthèses. Entre les parenthèses, créez une expression SELECT simple ou composée. Après le code qui définit le CTE, c'est-à-dire après l'expression AS(CTE_query_definition), créez une instruction SELECT qui produira les résultats.
Pour vous assurer que vous pouvez contrôler en externe les résultats d'un CTE, vous pouvez y transmettre un type de paramètre. Pour faire cela, après le nom du CTE et avant l'opérateur AS, ajoutez les parenthèses et passer un ou plusieurs paramètres, chacun représenté par un nom. Les noms des paramètres doivent être exactement les mêmes noms de colonnes de la table dont la déclaration du CTE sera basée. Le nombre de colonnes doit être le même que le nombre de colonnes qui seront impliquées dans la dernière instruction SELECT. Dans le corps du CTE, utilisez les paramètres comme vous le souhaitez. Par exemple, vous pouvez impliquer les paramètres dans une condition dans le CTE.
Une expression de table commune récursive est un CTE pouvant contenir plus d'une instruction SELECT. Dans le corps du CTE, vous pouvez créer autant d'instructions SELECT que vous le souhaitez, mais ces déclarations doivent être jointes. Pour se joindre à elles, vous pouvez utiliser un opérateur UNION, UNION ALL ou MERGER.
Une expression de table commune non récursive est un CTE qui peut être suivi par une seule instruction SELECT, INSERT, UPDATE ou DELETE qui implique une colonne à l'intérieur du corps du CTE. |
||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
||
| Précédent | Copyright © 2010 Yevol.com | Suivant |
|
|
||