2013-06-25 97 views
0

我收到提示在此存储过程:这个SQL过程有什么问题?

ALTER PROCEDURE [dbo].[spc_InsertSubjectToContentRelation] 
(
    @pCourseGUID NVARCHAR(MAX), 
    @pAssessmentIds NVARCHAR(MAX), 
    @pSubjectId NVARCHAR(MAX), 
    @pVideoIds NVARCHAR(MAX) 
) 
AS 
BEGIN 
SET NOCOUNT ON; 

IF EXISTS (SELECT * FROM SubjectToAssessmentAndVideoRelation WHERE SubjectId = @pSubjectId AND CourseGuid = @pCourseGuid) 
    UPDATE SubjectToAssessmentAndVideoRelation SET (AssociatedAssessments = @pAssessmentIds, AssociatedVideos = @pVideoIds) WHERE SubjectId = @pSubjectId AND CourseGuid = @pCourseGuid 
ELSE 
    INSERT INTO SubjectToAssessmentAndVideoRelation VALUES (@pCourseGUID, @pAssessmentIds, @pSubjectId, @pVideoIds) 
END 

的错误是:

过程spc_InsertSubjectToContentRelation,14号线
附近有语法错误('

什么在这个查询中是错误的吗?

编辑:

我忘了在发布代码时加入EXISTS。我的实际代码是存在的。我得到的误差存在

回答

2

IF声明没有做任何事情,它仅包含一个表达式:

IF (SELECT * FROM SubjectToAssessmentAndVideoRelation WHERE SubjectId = @pSubjectId AND CourseGuid = @pCourseGuid) 

它必须是这样的:

IF (SELECT * FROM SubjectToAssessmentAndVideoRelation WHERE SubjectId = @pSubjectId AND CourseGuid = @pCourseGuid) = 0 

--Then做你的逻辑

你可以改为像这样使用IF EXISTS

IF EXISTS (SELECT * FROM SubjectToAssessmentAndVideoRelation WHERE SubjectId = @pSubjectId AND CourseGuid = @pCourseGuid) 

希望有帮助。

+0

我改成了'IF EXISTS(SELECT * FROM SubjectToAssessmentAndVideoRelation WHERE SubjectId = @pSubjectId AND CourseGuid = @pCourseGuid)',但它没有奏效。我得到相同的错误 – Jaguar

+0

道歉,我没有注意到你的UPDATE语句的括号。您需要删除(和)您输入SET子句的位置。 – JBond

+0

谢谢,删除大括号解决了我的问题:) – Jaguar

2
IF (SELECT * FROM SubjectToAssessmentAndVideoRelation WHERE SubjectId = @pSubjectId AND CourseGuid = @pCourseGuid) 

这不是有效的测试。你的意思是IF EXISTS(...

+0

我改成了'IF EXISTS(SELECT * FROM SubjectToAssessmentAndVideoRelation WHERE SubjectId = @pSubjectId AND CourseGuid = @pCourseGuid)',但它没有奏效。我收到了同样的错误 – Jaguar