相当于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
我认为这使我的变更脚本更具可读性

