Nếu bạn cần tạo bảng trên máy chủ được liên kết, bạn có thể thực hiện việc này trực tiếp trên máy chủ từ xa hoặc bạn có thể thực hiện bằng cách chạy tập lệnh từ máy chủ cục bộ của mình.
Đây là hai cách sử dụng T-SQL để tạo bảng trên máy chủ được liên kết.
Cả hai phương pháp đều sử dụng EXECUTE
/ EXEC
tuyên bố. Nhưng mỗi người sử dụng một cách tiếp cận khác nhau.
Điều kiện tiên quyết
Việc thực thi các thủ tục được lưu trữ trên một máy chủ được liên kết yêu cầu bạn bật RPC Out (nếu nó chưa được bật).
Bạn có thể kiểm tra xem RPC Out có được bật hay không bằng cách truy vấn sys.servers
xem danh mục.
Đoạn mã sau cho phép RPC Out trên một máy chủ được liên kết có tên là Homer
:
EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
Với RPC Out được bật, chúng tôi có thể tiếp tục và tạo các bảng.
Phương pháp 1
Cách tiếp cận đầu tiên của chúng tôi là sử dụng AT
để chỉ định một máy chủ được liên kết để chạy mã. Cú pháp này cho phép chúng tôi gửi các lệnh chuyển tới các máy chủ được liên kết.
Nó diễn ra như thế này:
EXEC ('
USE [Pets];
CREATE TABLE [dbo].[Cats](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[CatName] [varchar](60) NULL
) ON [PRIMARY];
') AT Homer;
Thao tác này tạo một bảng có tên là Cats
trong Pets
cơ sở dữ liệu trên máy chủ được liên kết có tên là Homer
.
Mã này rõ ràng giả định rằng có một cơ sở dữ liệu được gọi là Pets
trên máy chủ được liên kết. Nếu không có, trước tiên bạn cần tạo nó.
Tên máy chủ được liên kết (Homer
trong trường hợp này) là một định nghĩa máy chủ được liên kết hiện có trong máy chủ cục bộ. Đó không phải là tên của máy chủ từ xa thực tế.
Phương pháp 2
Cách tiếp cận thứ hai của chúng tôi là thực thi sp_executesql
hệ thống lưu trữ thủ tục trên máy chủ từ xa, trong khi chuyển trong câu lệnh T-SQL của chúng tôi.
Như thế này:
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];
';
Vì vậy, mặc dù cú pháp khác nhau, nhưng kết quả là như nhau. Ngoài ra, CREATE TABLE
cú pháp không thay đổi, bất kể phương pháp được sử dụng để truy cập máy chủ được liên kết.
Chuyển câu lệnh dưới dạng một biến
Bạn cũng có thể chuyển CREATE TABLE
câu lệnh dưới dạng một biến cho EXEC
tuyên bố.
Điều này có thể hữu ích nếu bạn có nhiều bảng và / hoặc các đối tượng khác để tạo.
Dưới đây là một ví dụ sử dụng cú pháp đầu tiên:
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;
Và đây là tương tự bằng cách sử dụng cú pháp thứ hai:
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;