SQL temptables循环查询

时间:2012-09-26 16:51:19

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2000

我有一个看起来像

的临时表

TmpTable:

          ID(not unique)   Platform Name    OS    version 

           13                 UNIX          Ipad     5.1
           13                 Windows       Windows  2008
           14                 MAC           Ipad     4.1

Look_UP Tbl:对于上面的每一列

    PlatformName LookuP Tbl: platform id  desc
                                 2        Unix
                                 5        windows

       OS Lookup            :  OS id    OSname
                                 4       Ipad

    Version Lookup          :  Version id  name
                                 5         5.1

然后拥有EmpPlatformID,EmpOSID& EmpVersionID如下;

       EmpPlatform  - EmpId  PltformNameID
                       13         1
                       13         6
       same for OS & ID 

我需要一个查询 1)使用查找表为每个员工ID获取每列(PlatformName,OS,Version)的相应ID。 2)在每个实际表中插入该empid的ID。

因此,empPlatformTable应该看起来像;

       EmpPlatform  - EmpId  PltformNameID
                       13         1
                       13         6
                       13         2    - new row added from tmptbl
                       13         5    - new row added from tmptbl
 The EmpOS & EmpVer also has similar column so the emp id should have corresponding IDs inserted from temptbl . please helps

编辑: 用于更新PlatformName的代码

Update EmpPN 
    Set EmpN.platform_id = PLookup.platform_id 
from #TempTable tmpd (READUNCOMMITTED) 
inner join EmpPlatform EmpPN (READUNCOMMITTED) 
    on EmpPN.emp_id = emp_id collate database_default 
inner join PlatformLookUpTbl PLookup(READUNCOMMITTED)
    on PLookup.[platform_name] = tmpd.PlatformName collate database_default

1 个答案:

答案 0 :(得分:0)

为什么不

Update EmpPN
Set 
Platform_ID = 
  (
    Select Top 1 L.Platform_ID From PlatformLookupTbl As L
    Inner Join #TempTable As T On L.PlatForm_Name = T.PlatFormName
    Where T.Emp_ID = EmpPN.Emp_ID
  ),
<next field> = 
  <analogous lookup statement>[,...]

如果性能不好,请考虑在临时表上创建索引以提供帮助。