【发布时间】:2016-05-09 15:50:38
【问题描述】:
我想更新我的价值工资。
例如,如果@sex = 'F' 那么只有发生性行为 F 的员工会被更新,其他的和以前一样
ALTER procedure spEmployeeJamKerja (@sex varchar(1))
AS
BEGIN
SET NOCOUNT ON
DECLARE @temp int
DECLARE @fname nvarchar(20)
DECLARE femaleEmpCursor CURSOR FOR
SELECT e.fname, SUM(W.hours) AS TOTAL
FROM employee e, works_on w
WHERE e.sex = @sex AND e.ssn = W.ssn
GROUP BY e.ssn,e.fname
OPEN femaleEmpCursor
FETCH NEXT FROM femaleEmpCursor INTO @fname, @temp
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@temp > 20)
BEGIN
UPDATE employee
SET salary = salary + (@temp*5)
WHERE sex = @sex
END
ELSE IF (@temp <= 20)
BEGIN
UPDATE employee
SET salary = salary + ((@temp-1)*4)
WHERE sex = @sex
END
END
END
CLOSE femaleEmpCursor;
DEALLOCATE femaleEmpCursor;
在我尝试我的存储过程后,查询永远不会停止,就像无限循环一样。有什么解决这个问题的建议吗?
【问题讨论】:
-
它有几个问题,但我不得不问,你为什么要为此使用
cursor? -
因为每个员工都有不同的工作时间,所以我用它来更新我的 DB @Lamak 中每个员工的工资
-
光标是完全没有必要的,你甚至可以看到你没有在更新中使用员工姓名,所以它每次都会更新该性别的每一位员工(这将是正确的做法它,根本没有光标)
-
好的,用一套基本解决方案发布了答案
-
我强烈建议不要以明文形式存储 ssn...这是高度敏感的数据,应始终加密。
标签: sql-server stored-procedures cursor