Als u een tabel op een gekoppelde server moet maken, kunt u dit ofwel rechtstreeks op de externe server doen, of u kunt dit doen door een script uit te voeren vanaf uw lokale server.
Hier zijn twee manieren om T-SQL te gebruiken om een tabel op een gekoppelde server te maken.
Beide methoden gebruiken de EXECUTE
/EXEC
uitspraak. Maar elk gebruikt een andere benadering.
Vereiste
Voor het uitvoeren van opgeslagen procedures op een gekoppelde server moet u RPC Out inschakelen (als dit nog niet is ingeschakeld).
U kunt controleren of RPC Out is ingeschakeld door de sys.servers
. op te vragen catalogusweergave.
De volgende code activeert RPC Out op een gekoppelde server genaamd Homer
:
EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
Als RPC Out is ingeschakeld, kunnen we doorgaan en de tabellen maken.
Methode 1
Onze eerste benadering is om de AT
. te gebruiken argument om een gekoppelde server op te geven waarvoor de code moet worden uitgevoerd. Met deze syntaxis kunnen we pass-through-commando's naar gekoppelde servers sturen.
Het gaat als volgt:
EXEC ('
USE [Pets];
CREATE TABLE [dbo].[Cats](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](60) NULL
) ON [PRIMARY];
') AT Homer;
Dit creëert een tabel met de naam Cats
in de Pets
database op de gekoppelde server genaamd Homer
.
Deze code gaat er uiteraard van uit dat er een database is met de naam Pets
op de gekoppelde server. Als dat niet het geval is, moet u deze eerst maken.
De naam van de gekoppelde server (Homer
in dit geval) is een bestaande gekoppelde serverdefinitie in de lokale server. Het is niet de naam van de daadwerkelijke externe server.
Methode 2
Onze tweede benadering is het uitvoeren van de sp_executesql
systeem opgeslagen procedure op de externe server, terwijl we onze T-SQL-instructie doorgeven.
Zoals dit:
EXEC Homer.master.dbo.sp_executesql N'
USE [Pets];
CREATE TABLE [dbo].[Dogs](
[DogId] [int] IDENTITY(1,1) NOT NULL,
[DogName] [nvarchar](255) NULL,
[GoodDog] [bit] NULL
) ON [PRIMARY];
';
Dus hoewel de syntaxis anders is, is het resultaat hetzelfde. Plus, de CREATE TABLE
syntaxis verandert niet, ongeacht de methode die wordt gebruikt om toegang te krijgen tot de gekoppelde server.
Geef de stelling door als een variabele
U kunt ook de CREATE TABLE
. doorgeven statement als een variabele naar de EXEC
verklaring.
Dit kan handig zijn als u veel tabellen en/of andere objecten moet maken.
Hier is een voorbeeld waarin de eerste syntaxis wordt gebruikt:
DECLARE @tsql nvarchar(max);
SET @tsql = '
USE [Pets];
CREATE TABLE [dbo].[Cats](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](60) NULL
) ON [PRIMARY];
CREATE TABLE [dbo].[Dogs](
[DogId] [int] IDENTITY(1,1) NOT NULL,
[DogName] [nvarchar](255) NULL,
[GoodDog] [bit] NULL
) ON [PRIMARY];
';
EXEC (@tsql) AT Homer;
En hier is het equivalent met de tweede syntaxis:
DECLARE @tsql nvarchar(max);
SET @tsql = '
USE [Pets];
CREATE TABLE [dbo].[Cats](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](60) NULL
) ON [PRIMARY];
CREATE TABLE [dbo].[Dogs](
[DogId] [int] IDENTITY(1,1) NOT NULL,
[DogName] [nvarchar](255) NULL,
[GoodDog] [bit] NULL
) ON [PRIMARY];
';
EXEC Homer.master.dbo.sp_executesql @tsql;