删除Excel工作表中可用的所有SQL登录

时间:2016-07-25 09:59:42

标签: sql-server

我是新蜜蜂,

我有来自客户的请求,他已经给出了具有特定SQL登录的excel表,并且计数足够大。我目前正在使用下面一个并手动完成。

select 'drop login [' + name + '] from sys.server_principals WHERE name='ratnakar' and type_desc = 'SQL_LOGIN'
DROP LOGIN [name]

如果有人帮助我以有效的方式做到这一点真的很棒。

1 个答案:

答案 0 :(得分:0)

您也可以尝试将excel文件的内容导入到sql server数据库的表中,或者将excel导出到csv文件中并将其导回到SQL Server临时表中并打开游标并循环执行记录并将drop语句放入循环。

编辑:

使用批量插入导入临时表:https://technet.microsoft.com/en-us/library/ms191503%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396

BULK INSERT #Logins
   FROM 'C:\Logins.csv'
   WITH (
      DATAFILETYPE = 'char',
      FIELDTERMINATOR = ',',
      KEEPNULLS
   );

打开Cursor并循环遍历它并执行drop(https://www.mssqltips.com/sqlservertip/1599/sql-server-cursor-example/):

    DECLARE @loginName varchar(2000)
    DECLARE db_cursor CURSOR FOR  
    SELECT name 
    FROM #Logins

    OPEN db_cursor   
    FETCH NEXT FROM db_cursor INTO @loginName

    WHILE @@FETCH_STATUS = 0   
    BEGIN   
        select 'drop login [' + @loginName + '] from sys.server_principals WHERE name='ratnakar' and type_desc = 'SQL_LOGIN'
        DROP LOGIN [@loginName]  

        FETCH NEXT FROM db_cursor INTO @loginName   
    END   

    CLOSE db_cursor   
    DEALLOCATE db_cursor