这段代码(它只是一个中继器,而不是我要运行的实际代码)会在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