Sql 一个“创建登录用户”-用于多台单机

Sql 一个“创建登录用户”-用于多台单机,sql,visual-studio-2010,Sql,Visual Studio 2010,我已经为VS中的数据库项目创建了一个部署后脚本,在该脚本中,我授予Windows帐户UserX用户对数据库的访问权限。多个开发人员正在使用此部署后脚本,他们需要在自己的机器qcnb01、qcnb03、qcnb04等上授予此UserX访问权限。。使用独立的sql实例。有没有办法用占位符替换[qcnb02\UserX],即[qcnb???\UserX],然后相应地插入机器名 下面是我的CREATEUSER语句 如果不存在,请从sys.database_principals中选择*,其中name=N'

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

下面是我的CREATEUSER语句

如果不存在,请从sys.database_principals中选择*,其中name=N'qcnb02\UserX' 为登录名[qcnb02\UserX]创建用户[UserX],默认模式为[dbo] 去

让我澄清一下,UserX是静态部分,部署后脚本实际上在寻找并插入机器名qcnb??返回部署后脚本,即在构建\部署期间[qcnb25\UserX]。这可能吗

提前感谢你的帮助

JDA试试这个

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 

运行此“按原样”时,我得到…Msg 15401,级别16,状态1,第5行Windows NT用户或组“@MachineName\UserX”未找到。再查一下名字。有什么我不知道的吗?约提斯,谢谢你的帮助。它激励我把它做好。以下是有效的方法…DECLARE@MachineName VARCHAR100 SET@MachineName=Host\u Name DECLARE@SQL VARCHAR1000-如果不存在,请从sys.syslogins中选择名称,其中Name=N++@MachineName++'\UserX“BEGIN SET@SQL=”创建用户[UserX]登录['+@MachineName+'\machine],使用默认模式=[dbo]'执行@SQL END
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