我希望能够在sql server中删除所有登录,这不是我自己创建的。 我已经使用了以下代码并且它已成功执行但登录仍然存在并且没有任何更改。真的很困惑,需要帮助。 我的代码是
DECLARE @LoginName sysname
DECLARE @SQL NVARCHAR(1000)
DECLARE DBLOGINS CURSOR FOR
SELECT name FROM sys.database_principals
WHERE name <> N'schooladmin' and name <> N'school1' and name <> N'school2' and type_desc = 'SQL_LOGIN'
and sid <> 0x01 and substring(name, 1, 1) <> '#'
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
请帮忙。
答案 0 :(得分:1)
请检查以下修改后的代码,可能您正在寻找类似的内容。
Declare @sql varchar(max)=''
SELECT @sql +='Drop Login [' + name + '];' +char(13)+char(10)
FROM sys.database_principals
WHERE type_desc = 'SQL_Login' -- Double check this value, I found it SQL_User
and sid <> 0x01
and Left(name, 1) <> '#'
and name NOT IN( N'schooladmin', N'school1', N'school2')
print @sql
-- Exec(@sql)
答案 1 :(得分:0)
您的命令执行成功而没有使用任何登录,因为光标中的查询始终没有检索任何行!
使用OR
代替AND
进入where子句
如下:
WHERE (name <> N'lisabi' OR name <> N'school1' OR name <> N'school2' ) and type_desc = 'SQL_LOGIN'