Scripting Server Oggetti in un progetto di database Visual Studio 2010
-
28-10-2019 - |
Domanda
Lo script pre-distribuzione (script.predeployment.sql) è il posto migliore per mettere i comandi SQL che creano oggetti a livello di server (specificamente accedi nel mio caso)?
Devo creare accesso al server per gli utenti del database nel progetto e questo sembra l'unico luogo vagamente logico per metterli come tutto il resto nella struttura del progetto (creato dall'inversione del nostro Dev DB) è specifico del database. Volevo solo controllare dove altri archiviano i comandi a livello di server quando lavoravano con progetti di database Visual Studio.
Grazie molto.
Soluzione
Tutto ciò di cui hai bisogno prima di distribuire il tuo database sarebbe in quello script.
Nel nostro caso, aggiungiamo accessi nello script di distribuzione post. Non sono necessari quando distribuiamo il database e abbiamo deciso di mettere tutti i comandi relativi alla sicurezza nello stesso posto.
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
Qui è il riferimento pre e post distribuzione.