Ale*_*lex 31 sql sql-server porting view
CREATE OR REPLACE VIEW似乎在SQL Server中不起作用.那么我如何移植CREATE OR REPLACE VIEW到SQL Server上?
这就是我想要做的:
CREATE OR REPLACE VIEW data_VVVV AS
SELECT
VCV.xxxx,
VCV.yyyy AS yyyy,
VCV.zzzz AS zzzz
FROM
TABLE_A
;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
JaK*_*KXz 66
借用@Khan的答案,我会这样做:
IF OBJECT_ID('dbo.test_abc_def', 'V') IS NOT NULL
DROP VIEW dbo.test_abc_def
GO
CREATE VIEW dbo.test_abc_def AS
SELECT
VCV.xxxx
,VCV.yyyy AS yyyy
,VCV.zzzz AS zzzz
FROM TABLE_A
Run Code Online (Sandbox Code Playgroud)
Gor*_*off 41
这是另一种方法,您不必复制视图的内容:
IF (NOT EXISTS (SELECT 1 FROM sys.views WHERE name = 'data_VVV'))
BEGIN
EXECUTE('CREATE VIEW data_VVVV as SELECT 1 as t');
END;
GO
ALTER VIEW data_VVVV AS
SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A ;
Run Code Online (Sandbox Code Playgroud)
第一个检查是否存在视图(还有其他方法可以做到这一点).如果它不存在,那么用简单和愚蠢的东西创建它.如果是,那么继续前进到alter view声明.
Muh*_*eed 24
使用SQL Server 2016,您现在可以执行(MSDN源代码):
DROP VIEW IF EXISTS dbo.MyView
Run Code Online (Sandbox Code Playgroud)
Kha*_*han 13
编辑:虽然这个问题已被标记为重复,但它仍然受到关注.@JaKXz提供的答案是正确的,应该是接受的答案.
您需要检查视图是否存在.然后做一个CREATE VIEW或ALTER VIEW取决于结果.
IF OBJECT_ID('dbo.data_VVVV') IS NULL
BEGIN
CREATE VIEW dbo.data_VVVV
AS
SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A VCV
END
ELSE
ALTER VIEW dbo.data_VVVV
AS
SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A VCV
BEGIN
END
Run Code Online (Sandbox Code Playgroud)
已接受的解决方案存在需要两次维护相同语句的问题,它不是非常有效(尽管它有效).从理论上讲,Gordon Linoff的解决方案将会解决,除非它在MSSQL中不起作用,因为创建视图必须是批处理中的第一行.
drop/create不会回答提出的问题.以下是原始问题的工作.
if not exists (select * from sysobjects where name='TABLE_A' and xtype='V')
exec ('create view SELECT
VCV.xxxx,
VCV.yyyy AS yyyy,
VCV.zzzz AS zzzz
FROM TABLE_A')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113692 次 |
| 最近记录: |