2012-09-17 86 views
0

我想用這樣的存儲過程創建或更新視圖更新視圖:創建/使用存儲過程

CREATE PROC Proc_Get_Ready_Weapons 
AS 
BEGIN 

    IF EXISTS(select * FROM sys.views where name = 'dbo.vwGetReadyWeapons') 
    BEGIN 
    EXEC ('CREATE VIEW dbo.vwGetReadyWeapons ... rest of view') 
    END 
    ELSE 
    BEGIN 
    EXEC ('CREATE OR REPLACE VIEW dbo.vwGetReadyWeapons ... rest of view') 
    END 

    IF @@ROWCOUNT = 0 
    PRINT 'Warning: No rows were updated' 
END 

但收到此錯誤:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'OR'.
Warning: No rows were updated

+0

這裏有一些令人畏懼的事情。首先,無論視圖是否存在,您都執行相同的代碼。 –

+0

你確定檢查'@@ ROWCOUNT'是否視圖是否被創建或更新的有效測試?我可能會在這裏使用'TRY/CATCH'。 –

回答

1

CREATE OR REPLACE沒有在SQL Server中有效(at least not yet)。

也許你的意思是:

EXEC('ALTER VIEW dbo. ...'); 

您還沒有一個有效的檢查。我認爲你的意思是:

IF NOT EXISTS 
    (SELECT 1 FROM sys.views WHERE [object_id] = OBJECT_ID('dbo.vwGetReadyWeapons')) 
+0

我改變了你的陳述,但沒有創建視圖.. – DotnetSparrow

+0

你有你的條件翻轉,你說「如果視圖存在,創建它,否則編輯它。」聽起來倒退,不是嗎?嘗試IF NOT EXISTS而不是IF EXISTS。 –

+0

@aron你是對的:)謝謝 – DotnetSparrow