2013-04-03 37 views
0

我通過幾個練習題工作,我已經過這個問題上運行存儲過程,我不斷收到試圖執行,說接受所有表字段並更新這些值

程序時出現錯誤

消息156,級別15,狀態1,第1行的關鍵字 '過程'。」近
語法不正確

是否有人可以幫助?

寫程序UpdateTitle接受所有Title表列,並將用這些值更新標題。引發以下錯誤消息:ISBN不存在類別和/或發佈者代碼無效。

Create PROCEDURE UpdateTitle (@ISBN char(10), @SuggestedPrice smallmoney,@NumberInStock smallint,@PublisherCode int,@CategoryCode int) 
AS 
BEGIN 
IF @ISBN is null or @CategoryCode is null or @PublisherCode is null 
BEGIN 
RAISERROR ('ISBN,CategoryCode, or PublisherCode is not valid please enter valid data',16,1) 
END 
ELSE 
BEGIN  
IF (SELECT COUNT(*) FROM Title WHERE ISBN = @ISBN) = 0 
BEGIN 
    RAISERROR ('ISBN does not exist.',16,1) 
END 
ELSE 
BEGIN 
    SELECT 'Table Sucessfully Updated.'; 
    UPDATE Title 
    SET SuggestedPrice = @SuggestedPrice 
    WHERE ISBN = @ISBN; 

    BEGIN 
    IF (SELECT COUNT(*) FROM Title WHERE ISBN = @ISBN) = 0 
    BEGIN 
    RAISERROR ('ISBN does not exist.',16,1) 
END 
ELSE 
BEGIN 
    SELECT 'Table Sucessfully Updated.'; 
    UPDATE Title 
    SET NumberInStock = @NumberInStock 
    WHERE ISBN = @ISBN; 
    END 

      BEGIN 
    IF (SELECT COUNT(*) FROM Title WHERE ISBN = @ISBN) = 0 
    BEGIN 
    RAISERROR ('ISBN does not exist.',16,1) 
END 
ELSE 
BEGIN 
    SELECT 'Table Sucessfully Updated.'; 
    UPDATE Title 
    SET PublisherCode = @PublisherCode 
    WHERE ISBN = @ISBN; 
    END 
      BEGIN 
    IF (SELECT COUNT(*) FROM Title WHERE ISBN = @ISBN) = 0 
    BEGIN 
    RAISERROR ('ISBN does not exist.',16,1) 
END 
ELSE 
BEGIN 
    SELECT 'Table Sucessfully Updated.'; 
    UPDATE Title 
    SET CategoryCode = @CategoryCode 
    WHERE ISBN = @ISBN; 
    END 

END 
END 
END 
END 
END 
END 
GO 

然後

Execute Procedure UpdateTitle @ISBN ='1021031040', @suggestedproce ='40' , @NumberInStock ='10', @PublisherCode = '200', @CategoryCode = '1' 
+0

什麼是「無效」是什麼意思?是否有類別和發佈者代碼的查找表? –

回答

1
Execute Procedure UpdateTitle ... 

應該是:

EXEC dbo.UpdateTitle ... 

一些其他意見:

這裏是滿足您的所有需求更加簡潔的版本:

CREATE PROCEDURE dbo.UpdateTitle 
    @ISBN   CHAR(10), 
    @SuggestedPrice SMALLMONEY, 
    @NumberInStock SMALLINT, 
    @PublisherCode INT, 
    @CategoryCode INT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @msg VARCHAR(255); 

    IF @ISBN IS NULL OR @CategoryCode IS NULL OR @PublisherCode IS NULL 
    BEGIN 
    SELECT @msg = 'The following parameter(s) were invalid:' 
     + CASE WHEN @ISBN IS NULL THEN ' @ISBN' ELSE '' END 
     + CASE WHEN @CategoryCode IS NULL THEN ' @CategoryCode' ELSE '' END 
     + CASE WHEN @PublisherCode IS NULL THEN ' @PublisherCode' ELSE '' END; 

    RAISERROR (@msg, 11, 1); 
    RETURN; 
    END 

    IF NOT EXISTS (SELECT 1 FROM dbo.Title WHERE ISBN = @ISBN) 
    BEGIN 
    SET @msg = 'ISBN %s does not exist.'; 
    RAISERROR(@msg, 11, 1, @ISBN); 
    RETURN; 
    END 

    BEGIN TRY 
    UPDATE dbo.Title 
     SET SuggestedPrice = @SuggestedPrice, 
      NumberInStock = @NumberInStock, 
      PublisherCode = @PublisherCode, 
      CategoryCode = @CategoryCode 
     WHERE ISBN = @ISBN; 

    SELECT 'Update successful.'; 
    END TRY 
    BEGIN CATCH 
    SET @msg = ERROR_MESSAGE(); 
    RAISERROR(@msg, 11, 1); 
    END CATCH 
END 
GO 
+0

感謝您的幫助,你能解釋爲什麼它會是EXEC dbo.UpdateTitle而不是Execute Procedure UpdateTitle? – Shahze123

+0

因爲您不必告訴SQL Server您正在執行存儲過程。如果您對Transact-SQL語法有任何懷疑,請不要猜測,請查看文檔。[語法相當詳細地記錄,以便您不必猜測](http://msdn.microsoft.com/zh-cn/library/ms188332.aspx)。 –

相關問題