一个“创建登录用户” - 适用于多个独立机器

时间:2010-11-05 15:59:01

标签: sql visual-studio-2010

我为VS中的数据库项目创建了一个部署后脚本,我在其中授予Windows帐户“UserX”用户访问数据库的权限。多个开发人员正在使用此部署后脚本,他们需要在自己的机器qcnb01,qcnb03,qcnb04等上授予此“UserX”访问权限。(使用独立的sql实例)。有没有办法用占位符替换[qcnb02 \ UserX],即[qcnb ?? \ UserX],然后相应地插入机器名称?

以下是我的创建用户声明。

IF NOT EXISTS(SELECT * FROM sys.database_principals WHERE name = N'qcnb02 \ UserX') 创建用户[UserX] FOR LOGIN [qcnb02 \ UserX] WITH DEFAULT_SCHEMA = [dbo] GO

让我澄清一下,“UserX”是静态部分,部署后脚本实际上是在寻找并将机器名称(qcnb ??)插回到部署后的脚本(即[qcnb25 \ UserX])中构建\部署时间。这可能吗?

提前感谢您的帮助。

JDA

2 个答案:

答案 0 :(得分:0)

试试这个

DECLARE @MachineName VARCHAR(100)
SELECT @MachineName = Host_Name()
 DECLARE @SQL VARCHAR(1000)
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N''+@MachineName+'\UserX') 
BEGIN 

    SET @SQL = 'CREATE USER [UserX] FOR LOGIN ['+ @MachineName+'\USERX] WITH DEFAULT_SCHEMA=[dbo]' 
    EXECUTE @SQL
END 

答案 1 :(得分:0)

DECLARE @MachineName VARCHAR(100) 
SET     @MachineName = Host_Name() 
DECLARE @SQL VARCHAR(1000) 

--IF NOT EXISTS (SELECT name FROM sys.syslogins WHERE name = N''+@MachineName+'\machine')  

BEGIN  
    SET @SQL = 'CREATE USER [machine] FOR LOGIN ['+@MachineName+'\machine] WITH DEFAULT_SCHEMA=[dbo]'  
    EXECUTE (@SQL)
END