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;