检查 sql 视图是否存在,然后在更改之前动态创建它
Check if a sql view exists and then create it dynamically before altering it
我正在尝试检查 SQL 服务器视图是否存在,如果不存在,请使用动态脚本创建一个视图,然后更改它。
我正在使用以下脚本
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[test]') AND OBJECTPROPERTY(id,N'IsView') = 1)
BEGIN
EXEC dbo.sp_executesql @statement = N' CREATE VIEW [dbo].[test] AS '
END
GO
ALTER VIEW [dbo].[test]
---
---
上面的脚本抛出这个错误
Msg 102, Level 15, State 1, Procedure test, Line 1
Incorrect syntax near 'AS'.
我可以知道正确的做法吗?
CREATE
语句不完整。您可以通过将其编辑为以下内容来创建过程。
CREATE VIEW [dbo].[test] AS SELECT 1 'foo'
创建后,您可以继续更改它。
编辑:完全转义看起来像这样:
EXEC dbo.sp_executesql @statement = N' CREATE VIEW [dbo].[test1] AS SELECT 1 ''foo'' '
您的代码中没有实际的视图定义。话虽如此,如果 确实 存在,为什么不直接删除视图,然后您的代码就可以始终创建视图而不是尝试执行 ALTER
?
我正在尝试检查 SQL 服务器视图是否存在,如果不存在,请使用动态脚本创建一个视图,然后更改它。
我正在使用以下脚本
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[test]') AND OBJECTPROPERTY(id,N'IsView') = 1)
BEGIN
EXEC dbo.sp_executesql @statement = N' CREATE VIEW [dbo].[test] AS '
END
GO
ALTER VIEW [dbo].[test]
---
---
上面的脚本抛出这个错误
Msg 102, Level 15, State 1, Procedure test, Line 1
Incorrect syntax near 'AS'.
我可以知道正确的做法吗?
CREATE
语句不完整。您可以通过将其编辑为以下内容来创建过程。
CREATE VIEW [dbo].[test] AS SELECT 1 'foo'
创建后,您可以继续更改它。
编辑:完全转义看起来像这样:
EXEC dbo.sp_executesql @statement = N' CREATE VIEW [dbo].[test1] AS SELECT 1 ''foo'' '
您的代码中没有实际的视图定义。话虽如此,如果 确实 存在,为什么不直接删除视图,然后您的代码就可以始终创建视图而不是尝试执行 ALTER
?