0

我有一個臨時表,它看起來像SQL temptables循環查詢

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版本),用於每個僱員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 
+0

您可以發佈您迄今爲止的代碼,並讓我們知道您在哪裏遇到問題? –

+2

我強烈建議,當你考慮解決這類問題時,不要再考慮「循環」這個詞了。沒有任何關於這可以通過使用循環以任何方式進行優化。 –

回答

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

如果性能不好,可以考慮在你的臨時表創建索引助陣。

+0

無法獲得解決方案。我們可以使用遊標嗎? – user1681514

+0

@ user1681514你爲什麼要使用遊標? – dezso

+0

你是什麼意思?你有什麼嘗試? – Stu