sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man gör en UPDATE Pass-Through Query i SQL Server

I SQL Server, OPENQUERY rowset-funktionen gör att du kan köra en pass-through-fråga på en länkad server.

OPENQUERY refereras ofta till i FROM sats i en fråga som om den vore en tabell, men den kan också refereras till som måltabellen för en INSERT , UPDATE , eller DELETE uttalande.

Den här artikeln presenterar ett exempel på hur du använder OPENQUERY för att göra en UPDATE genomkopplingsfråga.

Exempel

Antag att den länkade servern heter Homer har en tabell i Pets databas som heter Cats med följande data.

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

Resultat:

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

Och låt oss säga att vi vill uppdatera ett av kattens namn.

Vi skulle kunna göra det med en UPDATE genomgångsfråga mot den länkade servern, så här.

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

Resultat:

(1 row affected)

Kontrollera resultaten

Vi kan nu köra en SELECT genomgångsfråga för att se resultaten.

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

Resultat:

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

Som väntat har den tredje raden nu uppdaterats.

En sak jag bör påpeka är att OPENQUERY accepterar inte variabler för sina argument.


  1. Hur LEAST() fungerar i MariaDB

  2. Distribuera MySQL, MariaDB, Percona Server, MongoDB eller PostgreSQL - enkelt med ClusterControl

  3. ORA-01658:det går inte att skapa INITIAL omfattning för segment i tabellutrymmet TS_DATA

  4. TSQL - Hur använder man GO inuti ett BEGIN .. END-block?