sql >> Databáze >  >> RDS >> Sqlserver

2 způsoby, jak vytvořit tabulku na propojeném serveru pomocí T-SQL

Pokud potřebujete vytvořit tabulku na propojeném serveru, můžete to udělat buď přímo na vzdáleném serveru, nebo to můžete udělat spuštěním skriptu z vašeho místního serveru.

Zde jsou dva způsoby použití T-SQL k vytvoření tabulky na propojeném serveru.

Obě metody používají EXECUTE /EXEC prohlášení. Ale každý používá jiný přístup.

Předpoklad

Provádění uložených procedur na propojeném serveru vyžaduje povolení výstupu RPC (pokud již není povoleno).

Můžete zkontrolovat, zda je povolen RPC Out dotazem na sys.servers zobrazení katalogu.

Následující kód umožňuje RPC Out na propojeném serveru s názvem Homer :

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

S povoleným RPC Out můžeme pokračovat a vytvářet tabulky.

Metoda 1

Naším prvním přístupem je použití AT argument k určení propojeného serveru, pro který se má kód spustit. Tato syntaxe nám umožňuje posílat průchozí příkazy na propojené servery.

Jde to takto:

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

Tím se vytvoří tabulka s názvem Cats v Pets databázi na propojeném serveru s názvem Homer .

Tento kód samozřejmě předpokládá, že existuje databáze s názvem Pets na propojeném serveru. Pokud tomu tak není, budete jej muset nejprve vytvořit.

Název propojeného serveru (Homer v tomto případě) je existující definice propojeného serveru na místním serveru. Není to název skutečného vzdáleného serveru.

Metoda 2

Náš druhý přístup je spuštění sp_executesql systém uloženou proceduru na vzdáleném serveru při předávání našeho příkazu T-SQL.

Takhle:

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

Takže i když je syntaxe odlišná, výsledek je stejný. Navíc CREATE TABLE syntaxe se nemění, bez ohledu na metodu použitou pro přístup k propojenému serveru.

Předat výpis jako proměnnou

Můžete také předat CREATE TABLE příkaz jako proměnná do EXEC prohlášení.

To může být užitečné, pokud potřebujete vytvořit mnoho tabulek a/nebo jiných objektů.

Zde je příklad použití první syntaxe:

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;

A zde je ekvivalent pomocí druhé syntaxe:

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. Python:osvědčený postup a nejbezpečnější způsob připojení k MySQL a provádění dotazů

  2. 3 Nechutné I/O statistiky, které zpožďují výkon SQL dotazu

  3. MariaDB JSON_UNQUOTE() Vysvětleno

  4. Jak zrušit omezení cizího klíče v databázi SQL Server - SQL Server / TSQL výukový program, část 75