Création de scripts d'objets serveur dans un projet de base de données Visual Studio 2010
-
28-10-2019 - |
Question
Le script de pré-déploiement (Script.PreDeployment.sql) est-il le meilleur endroit pour placer les commandes sql qui créent des objets au niveau du serveur (en particulier les connexions dans mon cas)?
J'ai besoin de créer des connexions serveur pour les utilisateurs de la base de données dans le projet et cela semble le seul endroit vaguement logique pour les placer car tout le reste dans la structure du projet (créé à partir de l'inversion de notre base de données de développement) est spécifique à la base de données.Je voulais donc simplement vérifier où les autres stockent leurs commandes au niveau du serveur lorsqu'ils travaillent avec des projets de base de données Visual Studio.
Merci beaucoup.
La solution
Tout ce dont vous avez besoin avant de déployer votre base de données se trouverait dans ce script.
Dans notre cas, nous ajoutons des connexions dans le script de post-déploiement.Ils ne sont pas nécessaires lorsque nous déployons la base de données, et nous avons décidé de mettre toutes les commandes liées à la sécurité au même endroit.
IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'$(DefaultLogin)')
BEGIN
BEGIN TRY
CREATE LOGIN [$(DefaultLogin)] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
END TRY
BEGIN CATCH
-- A try-catch is needed in case a user with a different name is created for the LOGIN specified.
END CATCH
END
GO
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'$(DefaultLogin)')
BEGIN
BEGIN TRY
CREATE USER [$(DefaultLogin)] FOR LOGIN [$(DefaultLogin)] WITH DEFAULT_SCHEMA=[dbo]
-- The db_owner role is added to the current database.
EXEC sp_addrolemember N'db_owner', N'$(DefaultLogin)'
END TRY
BEGIN CATCH
-- A try-catch is needed in case a user with a different name is created for the LOGIN specified.
END CATCH
END
Voici le préet référence après le déploiement.