【发布时间】:2019-06-10 14:43:53
【问题描述】:
我可以使用以下语句在我的数据库中创建一个空的存储过程:
declare @statement as NVARCHAR(250)
set @statement = N'CREATE PROCEDURE [dbo].[vwAS2ConnectionUpdated] as'
exec dbo.sp_executesql @statement
但是,如果我尝试使用相同的语句创建视图(在创建语句中使用 VIEW 除外)* 我会收到错误。
declare @statement as NVARCHAR(250)
set @statement = N'CREATE VIEW [dbo].[vwAS2ConnectionUpdated] as'
exec dbo.sp_executesql @statement
错误是:
Incorrect syntax near 'as'.
你能告诉我为什么会发生这种情况吗?
是否可以使用 sp_executesql 创建视图?
注意:我已经浏览过其他类似的 SO Q&A,但没有明确的答案。 这是我读过的一个例子: error in EXECUTE sp_executesql
注意 2:我在 SQL Server Express 实例上运行它 -- SQL Server 2014 SP3 CU3 - 12.0.6259.0(最新版本)
其他信息
当您使用代码创建 SP 时,它最终会创建一个如下所示的 SP:
CREATE PROCEDURE [dbo].[vwAS2ConnectionUpdated] as
但是,它不会创建这样的视图。也许这是 SQL Server 解析器等中的一个错误,或者是 sp_executesql(它允许这样创建 SP??)
【问题讨论】:
-
你的陈述的其余部分在哪里?
VIEW是预编译的SELECT语句;你的VIEW定义没有SELECT声明 -
是否可以使用 sp_executesql 创建视图? 可以,但为什么要这样做?
-
@Larnu 这是由 RoundhouseE 实现的更大脚本的一部分,它检查 SP(或在本例中为 View)的存在。这只是那个脚本的一个 sn-p。
-
@Sami 这是一个较大脚本的一部分,它确定 VIEW 是否存在,如果不存在,则创建它,然后运行 ALTER 之后。这是使用 RoundhouseE 的模式/过程。
-
没有人可以调试看不见的代码。
标签: sql sql-server tsql sql-server-express