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

Comment faire une requête UPDATE 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 une UPDATE 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       | Long Tail |
+---------+-----------+

Et disons que nous voulons mettre à jour l'un des noms de chat.

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

UPDATE OPENQUERY (
    Homer, 
    'SELECT CatName FROM Pets.dbo.Cats WHERE CatId = 3'
    )
SET CatName = 'Short Tail';

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  |
| 2       | Scratch    |
| 3       | Short Tail |
+---------+------------+

Comme prévu, la troisième ligne a maintenant été mise à jour.

Une chose que je dois souligner est que OPENQUERY n'accepte pas les variables pour ses arguments.