我希望使用每个登录名称与特定模式匹配的脚本从数据库中批量删除用户。使用TSQL的最佳方法是什么?
DELETE syslogins WHERE....
不起作用
尝试直接从syslogins删除将返回“不允许对系统目录进行即席更新”
答案 0 :(得分:5)
这个查询如何创建TSQL语句?然后将此SQL复制到新查询和执行。
select 'drop login [' + name + '];'
from sys.server_principals
WHERE name like 'foo%'
这基本上是从SSMS删除/删除登录时将创建并运行的脚本。
答案 1 :(得分:1)
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