2011-06-06 15 views
5

Sto cercando di rimuovere in massa utenti da un database con uno script per ogni accesso con un nome che corrisponde a un determinato modello. Qual è il modo migliore per farlo con TSQL?Eliminare tutti gli accessi in cui loginname come

DELETE syslogins WHERE.... non funziona

Cercando di eliminare direttamente dal syslogins tornerà "aggiornamenti ad hoc per cataloghi di sistema non sono ammessi"

risposta

5

Che ne dite di questa query per creare le sue dichiarazioni TSQL? Quindi copia questo SQL in una nuova query ed esegui.

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

Questo è fondamentalmente lo script che verrà creato ed eseguito quando si elimina/elimina un accesso da SSMS.

+0

Grazie p. Se non succede niente di meglio, lo farò in questo modo. Speravo di evitare il loop, ma se può essere fatto solo uno alla volta è quello che farò. –

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 
Problemi correlati