0
我有這樣的腳本:如何使用光標正確
declare @username nvarchar(255)
declare @Alterstatement nvarchar(2000)
declare @userloginname nvarchar(255)
declare @InsertIntoHistory nvarchar(2000)
declare getusername cursor
for
select name from [SysAdmin].[dbo].[DisabledAccount]
where name in (select name from sys.server_principals)
open getusername
Fetch next from getusername into @username
while @@FETCH_STATUS=0
begin
set @userloginname = '[' + @username + ']'`
set @Alterstatement = 'Alter Login' [email protected] +'Disable'
set @InsertIntoHistory = 'Insert into DisabledAccountHistory (DisabledName,ServerName) values('''
+ @username + ''','''+ @@servername +''')'
exec(@alterstatement)
exec(@InsertIntoHistory)
Fetch next from getusername
into @username
end
close getusername
deallocate getusername
我米使用這個腳本禁用某些用戶並插入到一個歷史表。但是當我運行這個時,出現了一些問題。例如,當我只有一個用戶需要禁用時,它將運行3次,並在歷史記錄表中插入3行。任何人都可以給我一些建議,如何問它每個用戶只運行一次?
非常感謝!
'選擇不同的名稱'以確保您只爲每個用戶獲得1行? –
沒有cuz問題是遊標運行3次,它只是從sys表中取一個名字。 @AlexK。 – Jack
如果這是執行三次,這是因爲[SysAdmin]。[dbo]。[DisabledAccount]中有給定用戶的三行。你也應該使用QUOTENAME而不是試圖在你的值中包裝[]。使用quotename可以正確處理所有的邊界情況。 –