使用SQL Server中的存储过程更新记录

时间:2014-03-28 14:35:46

标签: sql-server stored-procedures

一段时间后我回来处理db,并且有一个奇怪的错误。

我查看了语法假设的样子,看起来是正确的。

我得到了

  

附近的语法不正确
我尝试创建此存储过程时出现

错误:

CREATE PROCEDURE [dbo].[UpdateLanguageToInterpreter]
    @interpreterId varchar(128),
    @languageId int,
    @isSignLanguage bit,
    @prof_level int
AS
    insert into [dbo].[Interpreter_Language_List]
        ([isSignLang], [prof_level_id])
    VALUES(@isSignLanguage, @prof_level)
    WHERE
            [IntrepeterId] = @interpreterId 
            and [LanguageId] = @languageId

    RETURN 1

你有什么想法吗?

3 个答案:

答案 0 :(得分:3)

INSERT ... VALUES没有WHERE子句。

答案 1 :(得分:0)

您是否也希望插入@interpreterId和@languageId参数,或者在插入之前验证它们?如果它是前者,只需将字段和参数添加到插入中并删除where子句,否则,在调用SPROC之前进行验证。或者,您可以在插入,验证并决定插入或返回/退出过程之前执行select语句。

答案 2 :(得分:0)

你的标题是更新记录。如果要使用过程更新记录,可以使用:

CREATE PROCEDURE [dbo].[cusp_CustomerUpdate]
(
    @interpreterId varchar(128),
    @languageId int,
    @isSignLanguage bit,
    @prof_level int
)
AS
BEGIN
SET NOCOUNT OFF;
UPDATE [dbo].[Interpreter_Language_List]
SET      
[isSignLang]=@isSignLanguage,
[prof_level_id]=@prof_level 

WHERE
[IntrepeterId] = @interpreterId AND
[LanguageId] = @languageId
END
GO

如果你想使用INSERT INTO,你会在VALUES之后遗漏这样的东西:

SET 
  [IntrepeterId] = @interpreterId
  [LanguageId] = @languageId

SELECT 
    [isSignLang]=@isSignLanguage,
    [prof_level_id]=@prof_level
FROM [dbo].[Interpreter_Language_List]
 WHERE
    [IntrepeterId] = @interpreterId AND
    [LanguageId] = @languageId
    END
    GO

要么你需要摆脱WHERE子句:

INSERT INTO [dbo].[Interpreter_Language_List]
        ([IntrepeterId], 
         [LanguageId], 
         [isSignLang], 
         [prof_level_id])
VALUES
(@interpreterId ,  
@languageId, 
@isSignLanguage, 
@prof_level)

希望这有帮助