sql >> Database >  >> RDS >> Sqlserver

2 manieren om een ​​tabel op een gekoppelde server te maken met T-SQL

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;

  1. Hoe te voorkomen dat Activity Monitor de prestaties van uw SQL Server schaadt?

  2. Is het mogelijk om sql-servergegevens te selecteren met behulp van de ordinale positie van de kolom?

  3. SQL Server (localdb)\v11.0 uitgelegd

  4. Detecteren of waarde een getal is in MySQL