有一个存储过程,假设要获取超过24小时的登录信息并删除它。我添加了一个游标来遍历master.sys.sql_logins,以便它获取所有需要删除的登录。
然而,当我运行这个存储过程时,它永远不会停止执行,它只返回一个登录,当它假设返回两个时,如下所示:
不确定为什么会这样,但这是脚本:
BEGIN
DECLARE @RandomChar VARCHAR(2)
DECLARE @DropTemp NVARCHAR(500)
--Grabs the last two right characters where login name is older than 24 hours
DECLARE RandomChar_Cursor CURSOR FOR
SELECT RandomChar = RIGHT(RTRIM(name), 2) FROM master.sys.sql_logins WHERE name LIKE '%tempIMPLUSER%' AND create_date > DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) -1, 0)
OPEN RandomChar_Cursor
FETCH NEXT FROM RandomChar_Cursor INTO
@RandomChar
WHILE @@FETCH_STATUS = 0
BEGIN
SET @DropTemp = 'DROP LOGIN tempIMPLUser' + @RandomChar
print @droptemp
--EXEC sp_executesql @DropTemp
END
CLOSE RandomChar_Cursor
DEALLOCATE RandomChar_Cursor
END
答案 0 :(得分:2)
您还需要在循环内以及循环开始之前运行从游标中获取下一个值。
将您的循环更改为:
python main.py
答案 1 :(得分:2)
你不需要光标。通过使用动态sql来管理这种类型的管理,你可以这么简单。编码更容易,并且不需要循环的所有复杂性。一旦你满意动态sql字符串是正确的,你可以简单地取消注释exec行。
declare @SQL nvarchar(max) = ''
select @SQL = @SQL + 'DROP LOGIN ' + name + ';'
FROM master.sys.sql_logins
WHERE name LIKE '%tempIMPLUSER%'
AND create_date > DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) -1, 0)
select @SQL
--exec sp_executesql @SQL
答案 2 :(得分:0)
为了避免写两个fetch语句(以及将来改变):
"import time
import multiprocessing
import numpy as np
import threading
add_result = []
a = np.random.rand(10000000)
b = np.random.rand(10000000)
def calc_add(numbers):
global add_results
for n in numbers:
print('add' + str(a+b))
add_result.append(a+b)
print('within a process result' +str(add_result))
time.Time = start_time
if __name__=="__main__":
arr = a+b
p1 = multiprocessing.Process(target = calc_add, args = (arr))
p2 = multiprocessing.Process(target = calc_add, args = (arr))
p1.start()
p2.start()
p1.join()
p2.join()
print("result" +str(add_result))
print("done!")