将行从一个表复制到另一个表而不在第二个表中复制

时间:2014-12-10 14:52:24

标签: sql-server-2005

我有两个表,Table1列如下:

id surname  level term        pyear status
a1 peterson form1 first_term  2014 active
a2 chanaka  form1 first_term  2014 active

Table2列与Table1非常类似,如下所示:

id surname  level term        pyear

表1主键:id

表2主键:(id,level,term,pyear)

这是场景,Table1记录只能插入一次,一旦插入,就可以更新记录,使得level,term和pyear可以更改,例如level和pyear同时更改,因为l只能升级记录从2014年到2015年,从form1到form2同时出现。至于术语,同一级别和年份可以有first_term,second_term和third_term。我必须每次从一个术语移动到另一个术语时运行上述查询,比如first_term到second_term,或者从一年到下一年,比如从2014年到2015年,然后将从form1更改为form2。运行查询时,Table1中的更新记录必须反映为Table2中新插入的记录。例如,假设Table1内容已经过以下更新:

Table1
id surname  level term        pyear status
a1 peterson form1 first_term  2014 active
a2 chanaka  form1 first_term  2014 active

Table1
id surname  level term         pyear status
a1 peterson form1 second_term  2014 active
a2 chanaka  form1 second_term  2014 active

Table1
id surname  level term        pyear status
a1 peterson form1 third_term  2014 active
a2 chanaka  form1 third_term  2014 active

Table1
id surname  level term        pyear status
a1 peterson form2 first_term  2015 active
a2 chanaka  form2 first_term  2015 active

对于表1中的上述转换,表2必须如下所示:

Table2
id surname  level term         pyear 
a1 peterson form1 first_term   2014 
a2 chanaka  form1 first_term   2014 
a1 peterson form1 second_term  2014 
a2 chanaka  form1 second_term  2014 
a1 peterson form1 third_term   2014 
a2 chanaka  form1 third_term   2014 
a1 peterson form2 first_term   2015 
a2 chanaka  form2 first_term   2015

我的问题是,只要表2中没有任何其他记录具有相同的级别,术语和年份,查询就只能插入到表2中。如果至少有一条记录具有相同的级别,期限和年份,则无论最近在表1中输入了其他记录,都不会插入它们。如果我试图删除'如果不存在'只要表2中没有任何具有相同级别,术语和年份的记录,它也会在Table2中插入记录,否则它会报告它不能基于主键插入然后终止。如何在不重复表2中的记录的情况下解决问题。

查询运行如下:

create proc sp_extract(
    @level nvarchar(50),
    @term nvarchar(50),
    @pyear int
    )
    as
    if not exists(select  id,
                          surname,
                          level,
                          term,
                          pyear
                 from Table2 where level=@level and term=@term and pyear=@pyear)
    insert into Table2
        (
        id,
        surname,
        level,
        term,
        pyear
        )
    select  id,
            surname,
            level,
            term,
            pyear
    from Table1 where level=@level and term=@term and pyear=@pyear

0 个答案:

没有答案