遍历临时表并插入另一个表

时间:2014-02-25 09:50:01

标签: sql sql-server sql-server-2008

我有一个返回IDORG IDNAME的查询。

代码:

CREATE TABLE #TMP (ORG_ID INT)

INSERT INTO #TMP SELECT ORG_ID FROM [dbo].[fx_Rights_OrgIDs] (331)

SELECT [BRN_ID],[BRN_ORGID],[BRN_Name]
FROM [dbo].[BranchDetails]
WHERE [BRN_ORGID] IN (SELECT ORG_ID FROM #TMP)

DROP TABLE #TMP

返回:

BRA_ID    BRA_ORGID     BRA_Name

289      333            Office

290      334            Store

我想要做的是迭代#TMP并插入另一个表:SitePrefix如果SitePrefix中存在值,则不插入。

例如,将BRA_Name中的temp table插入SitePrefix,如果存在,则跳过。

SitePrefix列如下所示:(SPF_IDSPF_NameSPF_Prefix

SPF_ID是自动生成的,SPF_Name应来自BRA_Name,SPF_PrefixEMS

2 个答案:

答案 0 :(得分:0)

尝试使用EXCEPT下面的查询,它是SQL Server中的SET Difference运算符

INSERT INTO SitePrefix  
   SELECT [BRN_Name], 'EMS'
   FROM [dbo].[BranchDetails]
   WHERE [BRN_ORGID] IN (SELECT ORG_ID FROM #TMP)
   EXCEPT
   SELECT SPF_Name, 'EMS'
   FROM SitePrefix  

答案 1 :(得分:0)

试试这个,然后告诉任何问题,

MERGE siteprefix AS T 
using (SELECT [brn_id], 
              [brn_orgid], 
              [brn_name] 
       FROM   [dbo].[branchdetails] 
       WHERE  [brn_orgid] IN (SELECT org_id 
                              FROM   [dbo].[Fx_rights_orgids] (331))) AS s 
ON t.spf_name = brn_name 
WHEN NOT matched THEN 
  INSERT (spf_name, 
          spf_prefix) 
  VALUES (brn_name, 
          brn_orgid)