【问题标题】:SQL temptables Loop querySQL temptables 循环查询
【发布时间】:2012-09-18 08:50:41
【问题描述】:

我有一个临时表,看起来像

临时表:

          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 获取每列的对应 ID (PlatformName,OS,Version)。 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

【问题讨论】:

  • 您能否发布您目前拥有的代码,让我们知道您在哪里遇到问题?
  • 我强烈建议您在考虑解决此类问题时不要再考虑“循环”这个词。没有什么可以通过使用循环以任何方式优化的。

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


【解决方案1】:

为什么不

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>[,...]

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

【讨论】:

  • 无法获得解决方案。我们可以使用游标吗?
  • @user1681514 为什么要使用游标?
猜你喜欢
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
相关资源
最近更新 更多