2011-06-06 53 views
5

的所有登录名我正在寻找使用脚本为每个登录名使用与特定模式匹配的批量删除用户数据库的用户。用TSQL做这件事的最好方法是什么?删除登录名像

DELETE syslogins WHERE....不起作用

试图从syslogins中直删除将返回“特设更新系统目录不准”

回答

5

怎么样这个查询来创建TSQL语句?然后将这个SQL复制到一个新的查询和执行。

select 'drop login [' + name + '];' 
from sys.server_principals 
WHERE name like 'foo%' 

这基本上是会被创建并运行时删除/下降,由SSMS登录脚本。

+0

感谢p。如果没有更好的事情出现,我会这样做。我希望避免这个循环,但是如果只能一次完成一次,那就是我要做的。 – 2011-06-06 16:21:30

0
USE MyDatabase 

DECLARE @LoginName sysname 
DECLARE @SQL NVARCHAR(1000) 

DECLARE DBLOGINS CURSOR FOR 
    SELECT name FROM sys.database_principals 
    WHERE name LIKE 'some_pattern%' 

OPEN DBLOGINS 

FETCH NEXT FROM DBLOGINS INTO @LoginName 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @SQL = 'DROP LOGIN [' + @LoginName + ']' 
    EXEC sp_executesql @SQL 
    FETCH NEXT FROM DBLOGINS INTO @LoginName 
END 

CLOSE DBLOGINS 
DEALLOCATE DBLOGINS