Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment faire une requête DELETE Pass-Through dans SQL Server

Dans SQL Server, le OPENQUERY La fonction d'ensemble de lignes vous permet d'exécuter une requête directe sur un serveur lié.

OPENQUERY est généralement référencé dans le FROM clause d'une requête comme s'il s'agissait d'une table, mais elle peut également être référencée comme table cible d'un INSERT , UPDATE , ou DELETE déclaration.

Cet article présente un exemple d'utilisation de OPENQUERY faire un DELETE requête directe.

Exemple

Supposons que le serveur lié appelé Homer a une table dans les Pets base de données appelée Cats avec les données suivantes.

SELECT * FROM OPENQUERY (
    Homer, 
    'SELECT * FROM Pets.dbo.Cats'
    );

Résultat :

+---------+------------+
| CatId   | CatName    |
|---------+------------|
| 1       | FluffDupp  |
| 2       | Scratch    |
| 3       | Short Tail |
+---------+------------+

Et disons que nous voulons supprimer l'un des chats de la base de données.

Nous pourrions le faire en utilisant un DELETE requête directe sur le serveur lié, comme ceci.

DELETE OPENQUERY (
    Homer, 
    'SELECT CatName FROM Pets.dbo.Cats WHERE CatId = 2'
    );

Résultat :

(1 row affected)

Vérifiez les résultats

Nous pouvons maintenant exécuter un SELECT requête directe pour voir les résultats.

SELECT * FROM OPENQUERY (
    Homer, 
    'SELECT * FROM Pets.dbo.Cats'
    );

Résultat :

+---------+------------+
| CatId   | CatName    |
|---------+------------|
| 1       | FluffDupp  |
| 3       | Short Tail |
+---------+------------+

Comme prévu, la deuxième ligne a été supprimée et il ne reste plus que deux lignes.

Une chose à noter est que OPENQUERY n'accepte pas les variables pour ses arguments.