首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual 2008数据库版

Visual 2008数据库版
EN

Stack Overflow用户
提问于 2009-04-24 15:54:42
回答 1查看 653关注 0票数 0

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

大家好,

从“VisualStudioTeamSystem2008DatabaseEdition”到2008数据库版GDR R2

vstsdb中的参数化通常很弱,我们必须应用变通方法,让DB项目在每个开发人员工作站上本地部署,以便他们在本地部署应用程序数据库时能够按照沙箱原则进行工作。简单地说,回到一开始,当我使用vstsdb导入2005向导poject类型导入应用程序数据库时,我只是删除了它生成的用户脚本,并且必须添加一个由项目变量驱动的登录前部署脚本,SQLCMD变量只能在这个特殊的脚本位置使用:( .

它同时处理登录和数据库用户,然后将它们连接起来。

看起来像这样..。

代码语言:javascript
复制
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

问题;

如何使用民主德国版本实现这种功能,我看到它支持在引用层次结构中链接项目的概念。您有两个项目类型,一个数据库和一个服务器项目。但是,您仍然需要创建这样一个脚本,以实现项目在开发模式下部署在任何机器上的相同的动态能力?

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

关于复合项目结构的文献..。但我看不出有什么明显的解决办法。

EN

回答 1

Stack Overflow用户

发布于 2009-05-02 20:34:56

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

我强烈建议您安装RC2!

按照安装说明(非常重要)!

希望这能帮上忙。让我知道!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/786462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档