更新来自另一个链接服务器表的表字段,仅更新具有最新课程年份的一列

问题描述

我有两个表,一个包含学生详细信息,另一个包含学生课程YEAR的StudnetEnrollment表。这些表通过链接服务器链接。

在某些情况下,StudentEnrolment会为一名学生提供两个记录,一个记录的旧课程年份为0,而第二个记录的年份为1,不幸的是,这两个表的内部连接在两个结果之间进行了更新,从而仅使旧课程的一年。 如果这些表有任何更改,我每天需要更新大约27,000条记录。

我确实设法创建了一个合并功能,使其可以工作一次,但是它停止了。

这将使我相信来自StudentEnrolment表的非重复学生。 Stu_code是学生ID,sce_blok是课程年份。

          SELECT  *,CASE when sce_blok like 'P%' then '3'
                                ELSE dbo.udf_GetNumeric(sce_blok)
                            END  -- Get the students with all new course blocks if they are on two and moving forward.
FROM    (SELECT *,RANK() OVER (PARTITION BY stu_code ORDER BY sce_blok DESC) N
FROM  [SERVERL03.WMIN.AC.UK].[wmin].[dbo].[CMIS_Extract_StudentsEnrolments] ) M
WHERE N = 1

这是我的合并,但是使用x的“使用”封装无法识别它?

MERGE INTO [CMIS_Admin].[dbo].[STUDENTS] s
   USING (
        SELECT  *,CASE when sce_blok like 'P%' then '3'
                                    ELSE dbo.udf_GetNumeric(sce_blok)
                                END  -- Get the students with all new course blocks if they are on two and moving forward.
    FROM    (SELECT *,RANK() OVER (PARTITION BY stu_code ORDER BY sce_blok DESC) N
    FROM  [SERVERL03.WMIN.AC.UK].[wmin].[dbo].[CMIS_Extract_StudentsEnrolments] ) M
    WHERE N = 1
         )  x
      on  ( s.StudentId  =  x.stu_code COLLATE DATABASE_DEFAULT)
     and  s.SetId = dbo.GetTheCurrentAcademicYear() 
WHEN MATCHED THEN
   UPDATE 
        set
        s.CourseYear = CASE when x.sce_blok like 'P%' then '3'
                                    ELSE dbo.udf_GetNumeric(x.sce_blok)
                                END;

我是否应该创建另一个表并将其联接到原始联接并更新学生记录?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...