首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server相当于Oracle的CREATE或REPLACE视图

SQL Server相当于Oracle的CREATE或REPLACE视图
EN

Stack Overflow用户
提问于 2008-10-02 16:13:08
回答 7查看 142.9K关注 0票数 119

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

代码语言:javascript
复制
CREATE OR REPLACE VIEW MY_VIEW AS
SELECT SOME_FIELD
FROM SOME_TABLE
WHERE SOME_CONDITIONS

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

MSSQL (SQL Server2005或更高版本)中是否有等效项可以做同样的事情?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-03-04 02:28:20

尽管上面的解决方案可以完成这项工作,但它们会冒着丢失用户权限的风险。我更喜欢按如下方式创建或替换视图或存储过程。

代码语言:javascript
复制
IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[vw_myView]'))
    EXEC sp_executesql N'CREATE VIEW [dbo].[vw_myView] AS SELECT ''This is a code stub which will be replaced by an Alter Statement'' as [code_stub]'
GO

ALTER VIEW [dbo].[vw_myView]
AS
SELECT 'This is a code which should be replaced by the real code for your view' as [real_code]
GO
票数 107
EN

Stack Overflow用户

发布于 2009-06-02 11:41:54

我使用:

代码语言:javascript
复制
IF OBJECT_ID('[dbo].[myView]') IS NOT NULL
DROP VIEW [dbo].[myView]
GO
CREATE VIEW [dbo].[myView]
AS

..。

最近,我为这类东西添加了一些实用程序:

代码语言:javascript
复制
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

所以现在我写下

代码语言:javascript
复制
EXEC dbo.DropView 'mySchema', 'myView'
GO
CREATE View myView
...
GO

我认为这会使我的更改脚本更具可读性。

票数 14
EN

Stack Overflow用户

发布于 2008-10-02 16:18:53

我通常使用这样的东西:

代码语言:javascript
复制
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 [...]
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/163246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档