sql >> Databasteknik >  >> RDS >> Sqlserver

2 sätt att skapa en tabell på en länkad server med T-SQL

Om du behöver skapa en tabell på en länkad server kan du göra detta antingen direkt på fjärrservern, eller så kan du göra det genom att köra ett skript från din lokala server.

Här är två sätt att använda T-SQL för att skapa en tabell på en länkad server.

Båda metoderna använder EXECUTE /EXEC påstående. Men alla använder olika tillvägagångssätt.

Förutsättning

För att köra lagrade procedurer på en länkad server måste du aktivera RPC Out (om det inte redan är aktiverat).

Du kan kontrollera om RPC Out är aktiverat genom att fråga sys.servers katalogvy.

Följande kod aktiverar RPC Out på en länkad server som heter Homer :

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

Med RPC Out aktiverat kan vi gå vidare och skapa tabellerna.

Metod 1

Vårt första tillvägagångssätt är att använda AT argument för att ange en länkad server som koden ska köras för. Denna syntax tillåter oss att skicka genomkopplingskommandon till länkade servrar.

Det går så här:

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

Detta skapar en tabell som heter Cats i Pets databas på den länkade servern som heter Homer .

Den här koden förutsätter uppenbarligen att det finns en databas som heter Pets på den länkade servern. Om det inte finns det måste du skapa det först.

Det länkade servernamnet (Homer i detta fall) är en befintlig länkad serverdefinition på den lokala servern. Det är inte namnet på den faktiska fjärrservern.

Metod 2

Vår andra metod är att köra sp_executesql systemlagrad procedur på fjärrservern, samtidigt som vi skickar in vår T-SQL-sats.

Så här:

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å även om syntaxen är annorlunda är resultatet detsamma. Plus, CREATE TABLE syntaxen ändras inte, oavsett vilken metod som används för att komma åt den länkade servern.

Visa utdraget som en variabel

Du kan också skicka CREATE TABLE sats som en variabel till EXEC uttalande.

Detta kan vara användbart om du har många tabeller och/eller andra objekt att skapa.

Här är ett exempel med den första syntaxen:

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;

Och här är motsvarande med den andra syntaxen:

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. Hur man slumpmässigt ställer in text till knappar från SQLite utan upprepning?

  2. TypORM-underfrågor

  3. Hur man hittar minimivärdet för en kolumn i SQL

  4. Lägg till ett jobbsteg till ett befintligt SQL Server Agent Job (T-SQL)