Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 删除loginname喜欢的所有登录名_Tsql_Sql Server 2008 - Fatal编程技术网

Tsql 删除loginname喜欢的所有登录名

Tsql 删除loginname喜欢的所有登录名,tsql,sql-server-2008,Tsql,Sql Server 2008,我希望使用脚本从数据库中批量删除用户,每个登录名都与特定模式匹配。使用TSQL实现这一点的最佳方法是什么 删除不起作用的系统登录 尝试直接从系统登录中删除将返回“不允许对系统目录进行临时更新”如何使用此查询创建TSQL语句?然后将此SQL复制到新的查询和exec中 select 'drop login [' + name + '];' from sys.server_principals WHERE name like 'foo%' 这基本上就是从SSMS中删除/删除登录名时将创建和运行的脚

我希望使用脚本从数据库中批量删除用户,每个登录名都与特定模式匹配。使用TSQL实现这一点的最佳方法是什么

删除不起作用的系统登录


尝试直接从系统登录中删除将返回“不允许对系统目录进行临时更新”

如何使用此查询创建TSQL语句?然后将此SQL复制到新的查询和exec中

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

这基本上就是从SSMS中删除/删除登录名时将创建和运行的脚本。

谢谢。如果没有更好的办法,我就这样做。我希望避免循环,但如果一次只能做一个,那就是我要做的。
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