2009-04-24 9 views
0

connexions serveur Gestion et les utilisateurs de la base de données entre les développeurs postes de travail et d'autres environnements de déploiement à l'aide Visual Studio Team System Database EditionVisual Studio 2008 Database Edition

Bonjour les gens,

Regarder upgarding de « Visual Studio Team System 2008 Edition de base de données ' à Visual Studio Team System 2008 Database Edition GDR R2. Le paramétrage dans vstsdb est généralement faible et nous avons dû appliquer des solutions de contournement pour que les projets DB se déploient localement sur chaque poste de travail développeur pour qu'ils fonctionnent sur la base de données d'application lorsqu'ils le déployaient localement conformément au principe sandbox. Fondamentalement, au début, quand j'ai importé la base de données d'application en utilisant le type poject de l'assistant vstsdb import 2005, j'ai simplement supprimé les scripts utilisateur générés et ajouté un script de pré-déploiement de logins piloté par des variables de projet, le les variables SQLCMD ne peuvent être utilisées dans cet endroit spécial script :(...

Il portait à la fois les connexions et les utilisateurs de la base de données, puis les reliée.

ressemble à ça ..

BEGIN TRY 
    BEGIN TRANSACTION 

     IF UPPER('$(DeployToDev)') = 'FALSE' 
     BEGIN 
      -- SMRBtsService 
      IF EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'$(DomainAppUserAccount)') 
      DROP LOGIN [$(DomainAppUserAccount)] 
      CREATE LOGIN [$(DomainAppUserAccount)] FROM WINDOWS 

      IF EXISTS (SELECT * FROM sys.database_principals WHERE NAME = 'SMRBtsService') 
      DROP USER [SMRBtsService] 
      CREATE USER [SMRBTSService] FOR LOGIN [$(DomainAppUserAccount)] WITH DEFAULT_SCHEMA=[dbo] 

      -- WebUser 
      IF EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'$(DomainWebUserAccount)') 
      DROP LOGIN [$(DomainWebUserAccount)] 
      CREATE LOGIN [$(DomainWebUserAccount)] FROM WINDOWS 

      IF EXISTS (SELECT * FROM sys.database_principals WHERE NAME = 'WebUser') 
      DROP USER [WebUser] 
      CREATE USER [WebUser] FOR LOGIN [$(DomainWebUserAccount)] WITH DEFAULT_SCHEMA=[dbo] 


     END 
     ELSE IF UPPER('$(DeployToDev)') = 'TRUE' 
     BEGIN 
      -- BTSSERVICE 
      IF EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'$(COMPUTERNAME)\BTSSERVICE') 
      DROP LOGIN [$(COMPUTERNAME)\BTSSERVICE] 
      CREATE LOGIN [$(COMPUTERNAME)\BTSSERVICE] FROM WINDOWS 

      IF EXISTS (SELECT * FROM sys.database_principals WHERE NAME = 'SMRBtsService') 
      DROP USER [SMRBtsService] 
      CREATE USER [SMRBTSService] FOR LOGIN [$(COMPUTERNAME)\BTSSERVICE] WITH DEFAULT_SCHEMA=[dbo] 

      -- WebUser 
      IF EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'$(COMPUTERNAME)\WebUser') 
      DROP LOGIN [$(COMPUTERNAME)\WebUser] 
      CREATE LOGIN [$(COMPUTERNAME)\WebUser] FROM WINDOWS 

      IF EXISTS (SELECT * FROM sys.database_principals WHERE NAME = 'WebUser') 
      DROP USER [WebUser] 
      CREATE USER [WebUser] FOR LOGIN [$(COMPUTERNAME)\WebUser] WITH DEFAULT_SCHEMA=[dbo] 
     END 

    COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 

    IF (XACT_STATE()) <> 0 
     ROLLBACK TRANSACTION 

    DECLARE @ErrorMessage NVARCHAR(4000), 
     @ErrorNumber INT, 
     @ErrorSeverity INT, 
     @ErrorState INT, 
     @ErrorLine INT, 
     @ErrorProcedure NVARCHAR(200) ; 


    SELECT @ErrorNumber = ERROR_NUMBER(), @ErrorSeverity = 20, 
      @ErrorState = ERROR_STATE(), @ErrorLine = ERROR_LINE(), 
      @ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-') ; 


    SELECT @ErrorMessage = N'Error %d, Level %d, State %d, Procedure %s, Line %d, ' + 
      'Message: ' + ERROR_MESSAGE() ; 

    RAISERROR (@ErrorMessage, @ErrorSeverity, 1, @ErrorNumber, -- parameter: original error number. 
     @ErrorSeverity, -- parameter: 20, we want to stop the entire deploy process. 
     @ErrorState, -- parameter: original error state. 
     @ErrorProcedure, -- parameter: original error procedure name. 
     @ErrorLine-- parameter: original error line number. 
      ) ; 


END CATCH 

Question:

Comment pourrait-on réaliser ce genre de fonctionnalité en utilisant l'édition GDR, je vois qu'il supporte le concept de liaison de projets dans une hiérarchie de références. Et vous avez deux types de projet, un projet de base de données et un serveur. Mais encore faut-il créer un script comme celui-ci pour obtenir la même capacité dynamique à déployer sur n'importe quelle machine en mode dev?

La création d'un type de projet serveur ajoute simplement des objets serveur en plus de tous les objets (scripts) du type de projet Base de données.

La documentation parle de structures de projet composites ... Mais je ne vois toujours pas de solution évidente.

+0

Plus d'informations ici; http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/45f1ff05-18b8-4d94-bbc3-c92894e636db –

Répondre

1

Nous avons également eu beaucoup de problèmes avec VSDBCMD, Schema Compare et MSBuild Deployment concernant les utilisateurs et les connexions, et ciblant différents serveurs.

Je vous recommande fortement d'installer RC2!

Suivez les instructions d'installation (très important)!

Espérons que cela aide ... Faites le moi savoir!

+0

Merci pour vos commentaires. Je ne peux pas voir que GDR a une réponse à ce problème. Espérons que MS se rendra compte que le produit a besoin de cette adressage pour le travail d'équipe, c'est un échec assez important à bien des égards. Devoir comprendre le fonctionnement du produit dans une telle mesure nuit à sa simplicité et aliène les autres. –