Một cách để tạo cơ sở dữ liệu trên máy chủ được liên kết là chỉ cần chuyển đến máy chủ đó và tạo cục bộ.
Nhưng có lẽ bạn sẽ cảm thấy hơi bị lừa nếu tôi đưa đó là một trong “2 cách” để tạo cơ sở dữ liệu trên máy chủ được liên kết.
Ngoài ra, mặc dù tùy chọn đó tốt nếu bạn có thể và sẵn sàng thực hiện, nhưng bài viết này hướng dẫn bạn cách thực hiện từ xa bằng T-SQL mà không cần phải chuyển đến máy chủ cục bộ. Thêm vào đó, bạn có thể tìm thấy kỹ thuật này nhanh hơn so với việc chuyển sang máy chủ khác.
Cả “2 cách” đều liên quan đến EXECUTE
câu lệnh (cũng có thể được rút ngắn thành EXEC
). Chúng tôi có thể sử dụng câu lệnh này để thực thi mã trên máy chủ được liên kết và bao gồm cả việc tạo cơ sở dữ liệu trên đó.
Đ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';
Khi điều đó được bật, chúng tôi có thể tiếp tục và tạo cơ sở dữ liệu.
Phương pháp 1
Đây là phương pháp đầu tiên để tạo cơ sở dữ liệu trên máy chủ được liên kết.
EXEC ('CREATE DATABASE Pets') AT Homer;
Trong ví dụ này, tôi tạo một cơ sở dữ liệu có tên là Pets
trên một máy chủ được liên kết có tên là Homer
.
EXECUTE
/ EXEC
câu lệnh có thể được sử dụng để gửi các lệnh chuyển tới các máy chủ được liên kết.
Để thực hiện việc này, hãy đưa lệnh chuyển qua trong dấu ngoặc đơn sau EXECUTE
/ EXEC
từ khóa, sau đó theo dõi từ khóa đó với AT LinkedServerName
, trong đó LinkedServerName
là tên của máy chủ được liên kết mà bạn muốn tạo cơ sở dữ liệu.
Do đó, tất cả những gì chúng ta cần làm là đưa vào CREATE TABLE
tuyên bố như một đối số cho tuyên bố này.
Lưu ý rằng tên máy chủ được liên kết là tên mà bạn đã đặt khi tạo máy chủ được liên kết. Đó không phải là tên máy chủ thực của máy chủ từ xa.
Phương pháp 2
Phương pháp thứ hai tương tự như phương pháp đầu tiên, ngoại trừ trong trường hợp này, chúng tôi chuyển lệnh của mình tới sp_executesql
hệ thống lưu trữ thủ tục trên máy chủ từ xa.
EXEC Homer.master.dbo.sp_executesql N'CREATE DATABASE World;';
Để thực hiện việc này, chúng ta cần sử dụng tên gồm bốn phần, bao gồm tên của máy chủ được liên kết. Nếu chúng tôi không làm điều này, chúng tôi sẽ kết thúc việc thực thi sp_executesql
trên máy chủ cục bộ của chúng tôi thay vì máy chủ từ xa.
Chuyển câu lệnh dưới dạng một biến
Bạn cũng có thể chuyển CREATE DATABASE
câu lệnh dưới dạng một biến cho EXEC
tuyên bố.
Như thế này:
DECLARE @tsql nvarchar(max);
SET @tsql = 'CREATE DATABASE Pets';
EXEC (@tsql) AT Homer;
Mặc dù vậy, nếu bạn cố gắng chuyển sang cơ sở dữ liệu và tạo bảng, bạn có thể gặp sự cố, ngay cả khi bạn thêm GO
ở những nơi thông thường. Điều này có thể là do GO
từ khóa thực sự không phải là một phần của T-SQL và nó chỉ được công nhận bởi một số tiện ích nhất định.
Do đó, bạn có thể cần chạy một tập lệnh riêng để tạo các bảng.