2011-06-06 10 views
5

Estoy buscando eliminar de forma masiva los usuarios de una base de datos con un script para cada inicio de sesión con un nombre que coincida con un determinado patrón. ¿Cuál es la mejor manera de hacer esto con TSQL?Soltar todos los inicios de sesión donde nombre de inicio de sesión como

DELETE syslogins WHERE.... no funciona

Tratando de eliminar directamente desde syslogins volverá "actualizaciones ad hoc de los catálogos del sistema no están permitidos"

Respuesta

5

¿Qué hay de esta consulta para crear la formulación de TSQL? Luego copie este SQL en una nueva consulta y ejecutivo.

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

Este es básicamente el script que se creará y ejecutará cuando elimine/elimine un inicio de sesión de SSMS.

+0

Gracias p. Si no sale nada mejor, lo haré de esta manera. Esperaba evitar el ciclo, pero si solo se puede hacer uno a la vez, eso es lo que haré. –

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 
Cuestiones relacionadas