我想知道是否可以创建一个简单快速的T-SQL脚本来编辑数据库以创建用户,这对于不同的人来说是有效的。我的例子意味着每次循环变量得到不同的值。
例如,我想要以下内容:
这是一个示例脚本,如果我添加1个用户,但是我想添加多个具有此简化版本或类似用户的用户,因此人们只需要在1个区域中添加名称列表?
USE DBNAME1
GO
Declare @User NVARCHAR (30) = 'Domain\Username1', 'Domain\Username2', 'Domain\Username3' etc.
Declare @CMD NVARCHAR (90) = 'CREATE USER "' + @User +'" FOR LOGIN "' + @User + '"'
Declare @CMD2 NVARCHAR (90) ='ALTER ROLE [db_owner] ADD MEMBER [' + @User + ']'
if not exists(select name from sys.database_principals where name = @User)
Begin exec(@cmd) exec(@cmd2) End
ELSE
Begin Print '['+ @User +'] Exists' END
以上是因为它给出了以下错误:
Msg 102,Level 15,State 1,Line 3
'domain \ Username2'附近的语法不正确。
Msg 137,Level 15,State 2,Line 5
必须声明标量变量“@User”。
Msg 137,Level 15,State 2,Line 6
必须声明标量变量“@User”。
Msg 137,Level 15,State 2,Line 8
必须声明标量变量“@User”。
Msg 137,Level 15,State 2,Line 9
必须声明标量变量“@cmd”。
Msg 137,Level 15,State 2,Line 9
必须声明标量变量“@ cmd2”。
Msg 137,Level 15,State 2,Line 11
必须声明标量变量“@User”。
这样的事情是可能的,因为它会让事情变得更好吗?
您可以使用表变量来存储用户名。
DECLARE @Users TABLE(Username VARCHAR(64))
INSERT INTO @Users(Username) VALUES('Domain\Username1')
INSERT INTO @Users(Username) VALUES('Domain\Username2')
DECLARE @Username AS VARCHAR(64)
DECLARE C_Users CURSOR FOR
SELECT Username FROM @Users
OPEN C_Users
FETCH NEXT FROM C_Users INTO @Username
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS(SELECT name FROM sys.database_principals WHERE name = @Username)
BEGIN
EXEC('CREATE USER [' + @Username + '] FOR LOGIN [' + @Username + ']')
EXEC('ALTER ROLE [db_owner] ADD MEMBER [' + @Username + ']')
PRINT '['+ @Username +'] created'
END
ELSE
BEGIN
PRINT '['+ @Username +'] already exists'
END
FETCH NEXT FROM C_Users INTO @Username
END
CLOSE C_Users
DEALLOCATE C_Users