我有两张这样的表:
表1
Emp_ID Emp_Name Age Level
1 Tom 22
2 Susan 50
表2
Level Min_Age Max_Age
Associate 20 30
Senior 31 45
我想要做的是找出每个员工所处的级别。因此,我想:
对表1中的所有记录(所有员工) 一世。从Table2中选择Level,其中Table1.Age在Table2中的Min_Age和Max_Age之间 ii。移动到下一位员工
我尝试了以下内容:
DECLARE @level int, DECLARE @employee_age int
DELCARE @min_age varcahr int, @max_age varchar int
DECLARE testcursor CURSOR
LOCAL SCROLL STATIC
FOR
Select Emp_ID FROM Table1
OPEN testcursor
FETCH NEXT FROM testcursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM testcursor
@min_age=select Min_age from Table2
@max_age= select Max_age from Table2
@employee_age=Select age FROM Table1
@level=select Level from Table2 where
update Table1 set level=@level where @employee_age between @min_age and max_age
END
CLOSE cursorName
DEALLOCATE cursorName
这不完全有效,因为我还必须浏览表2中的记录。任何帮助,将不胜感激。
答案 0 :(得分:1)
你根本不必使用光标。只需将两张桌子连在一起。
table_id
答案 1 :(得分:0)
您可以加入 - 或者您可以使用以下
BEGIN
for i in (select level, [min age] as MinA, [max age] as MaxA from Table2)
LOOP
Update Table1
set Table1.[age level] = i.level
where Table1.[age level] between i.MinA and i.MaxA;
END LOOP;
END
答案 2 :(得分:0)
正如SQLChao所建议的那样,使用基于集合的方法可以更好地完成此操作,而不是循环遍历所有行并单独更新它们。
这是为了性能和可读性。
UIViewController *dvc = [self sourceViewController].navigationController;
阅读此问题,其中一个在此处概述了尽可能使用基于集合的查询的原因: Why are relational set-based queries better than cursors?