Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

2 cách tạo bảng trên máy chủ được liên kết bằng T-SQL

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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thay đổi cột hoặc tạo tập lệnh thay thế bằng cách sử dụng GUI trong SQL Server - Hướng dẫn sử dụng SQL Server / T-SQL Phần 38

  2. Chuyển đổi ‘datetime’ thành ‘smalldatetime’ trong SQL Server (Ví dụ T-SQL)

  3. Thư viện gốc sqljdbc_auth.dll đã được tải trong một trình tải lớp khác

  4. Gói SSIS không muốn tìm nạp siêu dữ liệu của bảng tạm thời

  5. Cập nhật thống kê SQL Server bằng cách sử dụng kế hoạch bảo trì cơ sở dữ liệu