【问题标题】:Visual Studio 2008 Database EditionVisual Studio 2008 数据库版
【发布时间】:2009-04-24 15:54:42
【问题描述】:

使用 Visual Studio Team System Database Edition 管理开发人员工作站和其他部署环境之间的服务器登录和数据库用户

大家好,

从升级看 'Visual Studio Team System 2008 数据库版' 到 Visual Studio Team System 2008 Database Edition GDR R2

vstsdb 中的参数化通常很弱,我们必须应用变通方法来让数据库项目在每个开发人员工作站上本地部署,以便他们在本地部署符合沙盒原则的应用程序数据库时工作。 基本上,回到开头,当我使用 vstsdb import 2005 向导项目类型导入应用程序数据库时,我只是删除了它生成的用户脚本,并且必须添加一个由项目变量驱动的登录预部署脚本 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 版本实现这种功能,我看到它支持在引用层次结构中链接项目的概念。你有两个项目类型,一个数据库和一个服务器项目。但是您仍然需要创建这样的脚本来实现项目在开发模式下部署在任何机器上的相同动态能力吗?

创建服务器项目类型只是在数据库项目类型的所有对象(脚本)之外添加服务器对象。

关于复合项目结构的文档讨论...但我仍然没有看到明显的解决方案。

【问题讨论】:

标签: database visual-studio-2008 sql-server-2005 teamsystem


【解决方案1】:

我们在 VSDBCMD、架构比较和 MSBuild 部署方面也遇到了很多关于用户和登录以及针对不同服务器的问题。

我强烈建议您安装 RC2!

按照安装说明进行操作(非常重要)!

希望这会有所帮助... 告诉我!

【讨论】:

  • 感谢您的 cmets。我看不出东德有解决这个问题的办法。希望 MS 能够意识到该产品需要这种解决方案来进行团队合作,这在很多方面都是一个相当大的失败。必须在如此程度上了解产品的工作方式会降低其简单性并疏远他人。
猜你喜欢
  • 2011-02-08
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多