SQL Server 2005 DROP LOGIN语法错误

这段代码(它只是一个中继器,而不是我要运行的实际代码)会在DROP LOGIN命令中引发语法错误:

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

有谁知道为什么?

您不能在DROP LOGIN使用variables。 要做到这一点,你需要使用dynamicSQL:

 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 

把它放在一个CURSOR可以做更多的事情:

 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