Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

2 начина за създаване на таблица на свързан сървър с помощта на T-SQL

Ако трябва да създадете таблица на свързан сървър, можете да направите това или директно на отдалечения сървър, или можете да го направите, като изпълните скрипт от вашия локален сървър.

Ето два начина за използване на T-SQL за създаване на таблица на свързан сървър.

И двата метода използват EXECUTE /EXEC изявление. Но всеки използва различен подход.

Предварително условие

Изпълнението на съхранени процедури на свързан сървър изисква да активирате RPC Out (ако вече не е активиран).

Можете да проверите дали RPC Out е активиран, като потърсите sys.servers изглед на каталог.

Следният код активира RPC Out на свързан сървър, наречен Homer :

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

С активиран RPC Out, можем да продължим и да създадем таблиците.

Метод 1

Първият ни подход е да използваме AT аргумент, за да посочите свързан сървър, за който да изпълните кода. Този синтаксис ни позволява да изпращаме команди за преминаване към свързани сървъри.

Става така:

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

Това създава таблица, наречена Cats в Pets база данни на свързания сървър, наречен Homer .

Този код очевидно предполага, че има база данни, наречена Pets на свързания сървър. Ако няма, първо трябва да го създадете.

Името на свързания сървър (Homer в този случай) е съществуваща дефиниция на свързан сървър в локалния сървър. Това не е името на действителния отдалечен сървър.

Метод 2

Вторият ни подход е да изпълним sp_executesql системна съхранена процедура на отдалечения сървър, като същевременно предава нашия T-SQL оператор.

Като това:

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

Така че, въпреки че синтаксисът е различен, резултатът е същият. Плюс това CREATE TABLE синтаксисът не се променя, независимо от използвания метод за достъп до свързания сървър.

Предаване на изявлението като променлива

Можете също да подадете CREATE TABLE оператор като променлива към EXEC изявление.

Това може да бъде полезно, ако имате много таблици и/или други обекти за създаване.

Ето пример за използване на първия синтаксис:

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;

А ето и еквивалента, използващ втория синтаксис:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Създайте база данни

  2. Как да изтриете файлове в SQL Server 2019

  3. Регистърът на транзакциите за базата данни е пълен

  4. Вмъкнете съхранената процедура за актуализиране на SQL Server

  5. Как да увеличите допустимия размер на прикачените файлове при изпращане на имейл в SQL Server (T-SQL)