sql >> Database teknologi >  >> RDS >> Sqlserver

2 måder at oprette en tabel på en sammenkædet server ved hjælp af T-SQL

Hvis du har brug for at oprette en tabel på en sammenkædet server, kan du gøre dette enten direkte på fjernserveren, eller du kan gøre det ved at køre et script fra din lokale server.

Her er to måder at bruge T-SQL til at oprette en tabel på en forbundet server.

Begge metoder bruger EXECUTE /EXEC udmelding. Men hver bruger en anden tilgang.

Forudsætning

Udførelse af lagrede procedurer på en forbundet server kræver, at du aktiverer RPC Out (hvis det ikke allerede er aktiveret).

Du kan kontrollere, om RPC Out er aktiveret ved at forespørge på sys.servers katalogvisning.

Følgende kode aktiverer RPC Out på en sammenkædet server kaldet Homer :

EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';

Med RPC Out aktiveret, kan vi gå videre og oprette tabellerne.

Metode 1

Vores første tilgang er at bruge AT argument for at angive en sammenkædet server, som koden skal køres for. Denne syntaks giver os mulighed for at sende pass-through-kommandoer til linkede servere.

Det går sådan her:

EXEC ('
    USE  [Pets];
    CREATE TABLE [dbo].[Cats](
        [CatId] [int] IDENTITY(1,1) NOT NULL,
        [CatName] [varchar](60) NULL
    ) ON [PRIMARY];
') AT Homer;

Dette opretter en tabel kaldet Cats i Pets database på den sammenkædede server kaldet Homer .

Denne kode forudsætter naturligvis, at der er en database kaldet Pets på den tilknyttede server. Hvis der ikke er det, skal du oprette det først.

Det linkede servernavn (Homer i dette tilfælde) er en eksisterende linket serverdefinition på den lokale server. Det er ikke navnet på den faktiske fjernserver.

Metode 2

Vores anden tilgang er at udføre sp_executesql systemlagret procedure på fjernserveren, mens vi sender vores T-SQL-sætning.

Sådan:

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];
    ';

Så selvom syntaksen er anderledes, er resultatet det samme. Plus, CREATE TABLE syntaks ændres ikke, uanset hvilken metode der bruges til at få adgang til den linkede server.

Send erklæringen som en variabel

Du kan også videregive CREATE TABLE sætning som en variabel til EXEC erklæring.

Dette kan være nyttigt, hvis du har mange tabeller og/eller andre objekter at oprette.

Her er et eksempel, der bruger den første syntaks:

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;

Og her er det tilsvarende ved hjælp af den anden syntaks:

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;

  1. Konvertering af udvalgte resultater til Indsæt script - SQL Server

  2. Få den nærmeste længde- og breddegrad fra MSSQL-databasetabellen?

  3. Hvad er forskellen mellem MySQL, MySQLi og PDO?

  4. Sådan overføres parametre til mysql-forespørgselstilbagekald i nodejs