SQL Server 2005 DROP LOGIN error de sintaxis

1

Este fragmento de código (es solo un repetidor, no el código real que voy a ejecutar) arroja un error de sintaxis en el comando DROP LOGIN:

declare @obso_user varchar(16)
set @obso_user = 'BEN_VA\20362781'
DROP LOGIN @obso_user

¿Alguien sabe por qué?

RonJohn
fuente

Respuestas:

0

No se puede usar una variable con DROP LOGIN. Para hacer esto, necesitará usar SQL dinámico:

DECLARE @obso_user VARCHAR(16)
SET @obso_user = 'BEN_VA\20362781'

DECLARE @sql NVARCHAR(100)
SET @sql = N'DROP LOGIN [' + @obso_user + ']'
EXEC sp_executesql @sql

Ponga eso en un CURSORpara hacer más que el inicio de sesión único:

DECLARE @obso_user VARCHAR(16)
DECLARE @sql NVARCHAR(100)

DECLARE USER_CUR CURSOR FOR
SELECT [Something] FROM User_Table

OPEN USER_CUR
FETCH NEXT FROM USER_CUR INTO @obso_user
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = N'DROP LOGIN [' + @obso_user + ']'
    EXEC sp_executesql @sql
    FETCH NEXT FROM USER_CUR INTO @obso_user
END

CLOSE USER_CUR
DEALLOCATE USER_CUR
squillman
fuente
Gracias. Un compañero de trabajo me mostró el comando EXECUTE (), y lo usé.
RonJohn
En cuanto a los cursores: eso es exactamente lo que estaba haciendo. :) El fragmento era solo un "repetidor" simplificado para mostrar el error.
RonJohn
Bueno. Con respecto a EXECUTE () vs. sp_executesql, sepa que sp_executesql permite la reutilización del plan de consulta y también las declaraciones parametrizadas (que ayudan a prevenir ataques de inyección SQL).
Squillman