Jeśli potrzebujesz utworzyć tabelę na serwerze połączonym, możesz to zrobić bezpośrednio na serwerze zdalnym lub możesz to zrobić, uruchamiając skrypt z serwera lokalnego.
Oto dwa sposoby wykorzystania T-SQL do utworzenia tabeli na połączonym serwerze.
Obie metody używają EXECUTE
/EXEC
oświadczenie. Ale każdy stosuje inne podejście.
Warunek wstępny
Wykonywanie procedur składowanych na serwerze połączonym wymaga włączenia wyjścia RPC (jeśli nie jest jeszcze włączone).
Możesz sprawdzić, czy wyjście RPC jest włączone, wysyłając zapytanie do sys.servers
widok katalogu.
Poniższy kod włącza wyjście RPC na połączonym serwerze o nazwie Homer
:
EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
Po włączeniu RPC Out możemy śmiało tworzyć tabele.
Metoda 1
Naszym pierwszym podejściem jest użycie AT
argument, aby określić połączony serwer, dla którego ma zostać uruchomiony kod. Ta składnia pozwala nam wysyłać polecenia tranzytu do połączonych serwerów.
To wygląda tak:
EXEC ('
USE [Pets];
CREATE TABLE [dbo].[Cats](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](60) NULL
) ON [PRIMARY];
') AT Homer;
Tworzy to tabelę o nazwie Cats
w Pets
baza danych na połączonym serwerze o nazwie Homer
.
Ten kod oczywiście zakłada, że istnieje baza danych o nazwie Pets
na połączonym serwerze. Jeśli nie, musisz go najpierw utworzyć.
Nazwa połączonego serwera (Homer
w tym przypadku) jest istniejącą definicją serwera połączonego na serwerze lokalnym. To nie jest nazwa rzeczywistego serwera zdalnego.
Metoda 2
Naszym drugim podejściem jest wykonanie sp_executesql
systemowa procedura składowana na zdalnym serwerze, podczas przekazywania naszej instrukcji T-SQL.
Tak:
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];
';
Więc nawet jeśli składnia jest inna, wynik jest taki sam. Dodatkowo CREATE TABLE
składnia nie zmienia się, niezależnie od metody użytej do uzyskania dostępu do połączonego serwera.
Przekaż oświadczenie jako zmienną
Możesz również przekazać CREATE TABLE
instrukcja jako zmienna do EXEC
oświadczenie.
Może to być przydatne, jeśli masz dużo tabel i/lub innych obiektów do stworzenia.
Oto przykład z użyciem pierwszej składni:
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 oto odpowiednik przy użyciu drugiej składni:
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;