2012-09-19 84 views
0

我正在創建一個存儲過程,它查詢表「條目」。 proc具有參數@ID,它是一個int,@APPROVED,這是一點點。我正在使用SQL Server 2005嵌套如果存儲過程導致語法錯誤

如果批准是錯誤的我想做一些不同的事情,如果它是真的。我有以下書面。當我嘗試創建它時,我會在關鍵字'END'附近得到錯誤的語法。「

如果我刪除嵌套,如果錯誤消失,但從我讀過的這是完全有效的語法。有誰能告訴我我哪裏出錯了嗎?

CREATE Procedure [dbo].[GetEntry](@ID int,@APPROVED bit) 
AS 
IF @APPROVED = 0 
BEGIN 
    --see if the unapproved entry has already been viewed 
    IF (SELECT COUNT(*) 
    FROM [dbo].[Entries] 
    WHERE EntryId = @ID AND Approved = @APPROVED AND Viewed = 0) > 0 
    BEGIN 

    END 

END 

任何幫助將非常感激。謝謝!

+1

你有一個空的''BEGIN' END',一些需要在那裏 – Taryn

+0

唉,現在我覺得自己很蠢。我只是在構建proc的結構,在每添加幾行後測試語法。謝謝。如果你想做出答案,我會把它作爲接受的答案。 – TheMethod

回答

1

你要做的東西在BEGIN/END,它不能爲空:

CREATE Procedure [dbo].[GetEntry](@ID int,@APPROVED bit) 
AS 
IF @APPROVED = 0 
BEGIN 
    --see if the unapproved entry has already been viewed 
    IF (SELECT COUNT(*) 
      FROM [dbo].[Entries] 
      WHERE EntryId = @ID AND Approved = @APPROVED AND Viewed = 0) > 0 
    BEGIN 
     -- do something here 
     select * 
     from [dbo].[Entries] 
    END 

END 
1

您需要在BEGIN/END內部執行某些操作,而手動獲取計數(必須掃描整個聚簇索引)的效率更高,因此需要EXISTS。你真的不在乎結果是2或5還是27,654,對嗎?

IF EXISTS (SELECT 1 FROM dbo.Entries WHERE ...) 
BEGIN 
    PRINT 'It exists!'; 
END