我为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
答案 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