【问题标题】:creating / updating view using stored procedure使用存储过程创建/更新视图
【发布时间】:2012-09-18 04:07:32
【问题描述】:

我想使用这样的存储过程创建或更新视图:

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

但是得到这个错误:

消息 156,第 15 级,状态 1,第 1 行
关键字“OR”附近的语法不正确。
警告:没有更新任何行

【问题讨论】:

  • 这里列出了一些令人畏惧的事情。首先,无论视图是否存在,您都在执行相同的代码。
  • 您确定检查@@ROWCOUNT 是对视图是否已创建或更新的有效测试?我可能会在这里使用TRY/CATCH

标签: sql sql-server-2008 tsql


【解决方案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'))

【讨论】:

  • 你的条件被翻转了,你说的是“如果视图存在,创建它,否则编辑它。”听起来倒退,不是吗?尝试 IF NOT EXISTS 而不是 IF EXISTS。
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2022-07-30
相关资源
最近更新 更多