【问题标题】:T-SQL, Get distinct values from column in source, check target, insert if not existT-SQL,从源中的列中获取不同的值,检查目标,如果不存在则插入
【发布时间】:2013-03-19 23:42:14
【问题描述】:

我见过几个有点相似的问题,但没有一个和我的完全一样。一个T-SQL大神应该能回答这个是一闪而过。

来自 HRMS 系统提要的员工和部门代码的源表(提要)。我的 SQL Server 数据库中有一个雇员表和一个部门表。我需要有一个存储过程,它将首先在 feeder 表中获取不同的部门代码列表,然后检查这些代码以查看它们是否存在于部门表中。如果他们不这样做,则从 feeder 表插入到部门表中。然后,插入到员工表中。

现在我发现其中一位业务分析师一直在 Excel 中获取单独的部门列表并手动添加它们。当数据已经从 HRMS 进入馈线表时,这似乎很疯狂。我可以进行插入,但我不知道如何遍历 feeder 表以查看每行中的部门代码是否已经存在于部门表中。感谢您的帮助。

J.

【问题讨论】:

    标签: tsql


    【解决方案1】:

    您可以在 SQL 2008 或更高版本中使用 merge 关键字。我刚刚测试了这个sn-p:

    merge department as d
    using feeder as f on f.code = d.code
      when not matched then
        insert (code)
          values (f.code);
    

    【讨论】:

      【解决方案2】:

      合并将起作用。因为我们只是在做插入,这也将:

      INSERT 
          department
          ( 
             departmentCode
          )
      SELECT departmentcode 
      FROM 
          ( 
              SELECT 
                  departmentcode 
              FROM 
                  feeder
              EXCEPT 
              SELECT 
                  departmentcode
              FROM 
                  department
          ) c;
      

      使用两个表中的部门代码索引,这种模式通常表现良好。

      【讨论】:

        猜你喜欢
        • 2021-02-19
        • 1970-01-01
        • 2012-07-17
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        • 2017-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多