2013-10-06 4 views
0

Я написал это Sp, чтобы вставить/обновить таблицу UserExams, которые содержат (UserID, ExamID, studentMark) Мне нужно добавить новую отметку для ученика, у которого нет знака , и обновить оценку ученика, если она уже существует я использовать Split функции, возвращающие таблицы содержат (ID, vItem)Update From & Select Into To ignore Duplicate

Я не сейчас, где есть ошибка здесь может кто-нибудь помочь мне, пожалуйста там ошибки я получил это: Многолетние часть идентификатора «UserExams. UserID "не может быть привязан.

ALTER PROC [dbo].[InsertUserMarks] 
( 
@pSemesterID int,  
@pCourseID int,  
@pExamID int,  
@pClassID int,  
@pUserID varchar(8000), 
@pMarks varchar(8000)  
)  
as  
--save the values of MaxMark To check if there is any Mark higher than the full mark if so then stop execution  
DECLARE @vTestMaxMark decimal(5,2)  
SET @vTestMaxMark = (select ExamMark from Exams where [email protected])  


IF EXISTS (select 'true' from Split(@pMarks,',') WHERE vItem>@vTestMaxMark)  
begin  
print('Operation cannot complete; there are one or more Mark ABOVE the Max value')  
return 
end  


      update UserExams 
      Set StudentMark=MA.vItem 
      from split(@pUserID,',') us 
      inner join split(@pMarks,',') ma on us.ID = ma.id 
      where UserExams.UserID=US.vItem 
      and [email protected] 


      --Insert 
      insert into UserExams 
      select us.vItem,1,ma.vItem,system_user,getdate(),null,null from 
      split(@pUserID,',') us 
      inner join split(@pMarks,',') ma on us.ID = ma.id 
      WHERE NOT EXISTS (
      SELECT 'True' 
      FROM split(@pUserID,',') us 
      inner join split(@pMarks,',') ma on us.ID = ma.id 
      where UserExams.UserID=US.vItem 
      and [email protected] 

      ) 

ответ

0

Проблема, по-видимому, находится в самом низу запроса. У вас есть вставка с дополнительным запросом, который ссылается на таблицу UserExams, но этот дополнительный запрос не включает UserExams в его предложения FROM, которые ему нужно.

0

В вашем случае я использовал бы Заявление о слиянии в этом разделе, все для записи. Существование в большой таблице может быть очень дорогостоящим.
Merge заявление будет проверять для записи существования и использования в когда подобрано THEN UPDATE и КОГДА НЕ MATCHED THEN INSERT сделает ваш код намного проще и легче понять и поддержать.

Смежные вопросы