相当于Oracle的CREATE或者REPLACE VIEW的Sql Server

时间:2020-03-06 15:02:09  来源:igfitidea点击:

在Oracle中,我可以用一个语句重新创建一个视图,如下所示:

CREATE OR REPLACE VIEW MY_VIEW AS
SELECT SOME_FIELD
FROM SOME_TABLE
WHERE SOME_CONDITIONS

就像语法所暗示的那样,这将删除旧视图并使用我给出的任何定义重新创建它。

SQL Server 2005中是否有等效的工具可以执行相同的操作?

解决方案

我们可以使用" IF EXISTS"来检查视图是否存在,如果存在则删除视图。

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
        WHERE TABLE_NAME = 'MyView')
    DROP VIEW MyView
GO

CREATE VIEW MyView
AS 
     ....
GO

我通常使用这样的东西:

if exists (select * from dbo.sysobjects
  where id = object_id(N'dbo.MyView') and
  OBJECTPROPERTY(id, N'IsView') = 1)
drop view dbo.MyView
go
create view dbo.MyView [...]

我们可以使用ALTER更新视图,但这不同于Oracle命令,因为它仅在视图已经存在时才起作用。借助DaveK的答案可能会更好,因为那将始终有效。

我用:

IF OBJECT_ID('[dbo].[myView]') IS NOT NULL
DROP VIEW [dbo].[myView]
GO
CREATE VIEW [dbo].[myView]
AS

...

最近,我为此类内容添加了一些实用程序:

CREATE PROCEDURE dbo.DropView
@ASchema VARCHAR(100),
@AView VARCHAR(100)
AS
BEGIN
  DECLARE @sql VARCHAR(1000);
  IF OBJECT_ID('[' + @ASchema + '].[' + @AView + ']') IS NOT NULL
  BEGIN
    SET @sql  = 'DROP VIEW ' + '[' + @ASchema + '].[' + @AView + '] ';
    EXEC(@sql);
  END 
END

所以现在我写

EXEC dbo.DropView 'mySchema', 'myView'
GO
CREATE View myView
...
GO

我认为这使我的变更脚本更具可读性