Une façon de créer une base de données sur un serveur lié consiste simplement à sauter sur ce serveur et à le créer localement.
Mais vous vous sentiriez probablement un peu trompé si j'incluais cela comme l'une des "2 façons" de créer une base de données sur un serveur lié.
De plus, bien que cette option soit correcte si vous êtes capable et désireux de le faire, cet article vous montre comment le faire à distance en utilisant T-SQL, sans avoir à passer au serveur local. De plus, vous pourriez trouver cette technique plus rapide que de sauter sur l'autre serveur.
Les deux "2 manières" impliquent le EXECUTE
déclaration (qui peut également être raccourcie en EXEC
). Nous pouvons utiliser cette instruction pour exécuter du code sur le serveur lié, et cela inclut la création d'une base de données dessus.
Prérequis
L'exécution de procédures stockées sur un serveur lié nécessite que vous activiez RPC Out (si ce n'est déjà fait).
Vous pouvez vérifier si RPC Out est activé en interrogeant sys.servers
vue du catalogue.
Le code suivant active RPC Out sur un serveur lié appelé Homer
:
EXEC sp_serveroption 'MyLinkedServer', 'rpc out', 'true';
Une fois que cela est activé, nous pouvons continuer et créer la base de données.
Méthode 1
Voici la première méthode pour créer une base de données sur le serveur lié.
EXEC ('CREATE DATABASE Pets') AT Homer;
Dans cet exemple, je crée une base de données appelée Pets
sur un serveur lié appelé Homer
.
Le EXECUTE
/EXEC
L'instruction peut être utilisée pour envoyer des commandes directes aux serveurs liés.
Pour ce faire, incluez la commande pass-through entre parenthèses après EXECUTE
/EXEC
mot-clé, puis suivez-le avec AT LinkedServerName
, où LinkedServerName
est le nom du serveur lié sur lequel vous souhaitez créer la base de données.
Par conséquent, tout ce que nous avons à faire est d'inclure notre CREATE TABLE
comme argument de cette instruction.
Notez que le nom du serveur lié est le nom que vous lui avez donné lors de la création du serveur lié. Ce n'est pas le nom de serveur réel du serveur distant.
Méthode 2
La deuxième méthode est similaire à la première, sauf que dans ce cas nous passons notre commande au sp_executesql
procédure stockée système sur le serveur distant.
EXEC Homer.master.dbo.sp_executesql N'CREATE DATABASE World;';
Pour ce faire, nous devons utiliser le nom en quatre parties, qui comprend le nom du serveur lié. Si nous ne le faisions pas, nous finirions par exécuter sp_executesql
sur notre serveur local au lieu du serveur distant.
Transmettre l'instruction en tant que variable
Vous pouvez également passer le CREATE DATABASE
instruction en tant que variable dans EXEC
déclaration.
Comme ceci :
DECLARE @tsql nvarchar(max);
SET @tsql = 'CREATE DATABASE Pets';
EXEC (@tsql) AT Homer;
Cependant, si vous essayez ensuite de basculer vers la base de données et de créer les tables, vous risquez de rencontrer des problèmes, même si vous ajoutez GO
aux endroits habituels. C'est probablement parce que le GO
Le mot-clé ne fait pas réellement partie de T-SQL et n'est reconnu que par certains utilitaires.
Par conséquent, vous devrez peut-être exécuter un script séparé pour créer les tables.