2012-09-17 87 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