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