2009-04-24 7 views
0

のVisual Studio Team Systemのデータベース・エディションにのVisual Studio 2008のデータベース版

こんにちは人、 「のVisual Studio Team Systemの2008年からupgardingを見る

を使用する開発者のワークステーションと他のデプロイメント環境間のサーバーのログインおよびデータベースユーザーを管理しますデータベース版 ' 〜 Visual Studio Team System 2008 Database Edition GDR R2です。

vstsdbのパラメタリゼーションは一般的に脆弱で、DBプロジェクトを各開発者ワークステーションにローカルに展開して、サンドボックスの原則に準拠してローカルに展開したときにアプリケーションデータベースで作業するための回避策を適用する必要がありました。 基本的には、始めに、vstsdb import 2005ウィザードのpojectタイプを使用してアプリケーションデータベースをインポートしたときに、単に生成されたユーザースクリプトを削除し、プロジェクト変数によって駆動されたログイン前のデプロイスクリプトSQLCMD変数は、この特別なスクリプトの場所内のみを使用することができます:(...

それはそれらをリンクした後、ログインおよびデータベースユーザーの両方を扱っ。

このような何かを見て...

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 

質問;

GDR版を使用してこのような機能を実現するには、参照階層内でプロジェクトをリンクするという概念がサポートされています。また、2つのプロジェクトタイプ、データベースプロジェクトとサーバープロジェクトがあります。しかし、それでもdevモードで任意のマシンにデプロイするのと同じダイナミックな能力を達成するには、このようなスクリプトを作成する必要がありますか?

サーバープロジェクトタイプを作成すると、データベースプロジェクトタイプのすべてのオブジェクト(スクリプト)に加えてサーバーオブジェクトが追加されます。

複合プロジェクト構造についてのドキュメント...しかし、私には明らかな解決策はありません。

+0

詳細情報はここにあります。 http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/45f1ff05-18b8-4d94-bbc3-c92894e636db –

答えて

1

また、VSDBCMD、スキーマ比較、MSBuildデプロイメントでは、ユーザーとログイン、および異なるサーバーを対象にしてかなりの問題が発生しています。

私は強くRC2をインストールすることをお勧めします!

インストール手順に従います(非常に重要です)!

希望すると... お知らせください!

+0

いただきありがとうございます。 GDRにこの問題に対する回答があることはわかりません。うまくいけば、MSは、製品が多くの点でかなり大きな失敗を抱えてチームワークのためにこのような取り組みを必要としていることを理解するでしょう。そのような程度で製品が動作する方法を理解することは、その単純さを損なうものであり、他者を疎外させる。 –

関連する問題