2011-03-07 120 views
0

也许我没有正确获取SQL参数,但这对我无效。难道我做错了什么?当我尝试保存此存储过程时,我在关键字'AS'附近收到错误的语法。SQL存储过程错误

ALTER PROCEDURE MyProc 
AS 
DECLARE @CID int 

DELETE FROM Contacts 
WHERE [email protected] 

RETURN 
+0

你的意思是通过'@CID '作为输入参数?如果是,那么Avitus的答案应该工作! – Vishal 2011-03-07 15:43:23

+1

我猜你的SQL不是发布的,而是有一个不是'MyProc'的名称:要么你使用了一个保留字的名字,或者你完全省略了过程名。 – onedaywhen 2011-03-07 15:58:58

回答

3

你应该试试这个 -

ALTER PROCEDURE MyProc 
    @CID int 
AS 
BEGIN 

DELETE FROM Contacts 
WHERE [email protected] 

RETURN 

END 
GO 
+1

不,不需要begin ... end。另外,不需要返回。 – splattne 2011-03-07 15:46:50

+0

@splattne - 我只是因为OP在他的问题中包含了回报而包含了回报。在这种情况下,这不是多余的。 – 2011-03-07 15:49:03

+0

@marc - 这不是必需的。直到'GO'都被包含在定义中,即使是在'BEGIN'之后......'END' – 2011-03-07 15:58:52

1

你需要改变它是:

ALTER PROCEDURE MyProc 
    @CID int 
AS 

Begin 

DELETE FROM Contacts 
WHERE [email protected] 

end 

GO 
+0

看起来,操作者确实需要改变他的陈述,但是,他不应该得到一个错误。 – Lamak 2011-03-07 15:42:23

+0

你是正确的,该过程不应该错误,但它没有按预期执行,因为@CID未设置为问题中的值。我相信他正试图让参数正常工作。 – Avitus 2011-03-07 15:45:02

1

你缺少一个程序的名字

ALTER PROCEDURE sp_YOURSPROC 

编辑:

你必须有一个同名的程序?如果不是,您可能需要CREATE而不是ALTER。但是这会给你一个invalid object name错误。

@CID应该是一个参数吗?否则似乎没用。但即使是这样的情况下,你不会得到任何错误,它只是不会正确执行。

ALTER PROCEDURE MyProc 
    @CID INT 
AS 
    DELETE FROM Contacts 
    WHERE [email protected] 
+0

复制粘贴错字不是真正的问题 – atrljoe 2011-03-07 15:40:50

+0

是的我在这个例子中已经有一个存储过程MyProc – atrljoe 2011-03-07 15:46:49

0

您已经声明@CID 的过程。应该声明的参数,但:

ALTER PROCEDURE MyProc 

    @CID int -- it's a parameter 

AS 

    DELETE 
    FROM Contacts 
    WHERE ContactID = @CID 

如果存储procudure不存在于数据库中还没有,你将不得不使用CREATE PROCEDURE

CREATE PROCEDURE MyProc 

    @CID int -- it's a parameter 

AS 

    DELETE 
    FROM Contacts 
    WHERE ContactID = @CID