gpt4 book ai didi

sql - 为什么 CREATE VIEW 必须是批处理中的第一个语句?

转载 作者:行者123 更新时间:2023-12-02 22:00:06 30 4
gpt4 key购买 nike

是否有任何逻辑原因使得 CREATE VIEW 必须成为批处理中的第一个语句?这样的设计背后的原理是什么?

最佳答案

与其说它必须是批处理中的第一个语句,不如说它必须是批处理中的唯一语句。出于同样的原因,CREATE PROCEDURECREATE FUNCTION 等都必须在自己的批处理中......它们需要独立于其他代码进行编译。原因之一是确保在创建对象之前创建的批处理中的任何内容在创建对象时实际存在,并且之后引用该对象的任何内容都有指向的内容。另一个是帮助防止这种情况:

-- some other code here

CREATE PROCEDURE dbo.whatever
AS
-- procedure code here

-- some other code here

我们不希望“此处的其他代码”包含在存储过程的定义中。我们也不知道该怎么办:

CREATE PROCEDURE dbo.proc1
AS
-- some code here
-- a comment here
CREATE PROCEDURE dbo.proc2
AS

既然我们可以在CREATE PROCEDURE之前合法地放置注释,解析器如何知道注释属于哪个对象?

对于挑剔的人来说,同样的事情也适用于 View 。 (请注意,示例中使用过程只是因为过程可以包含多个语句,而 View 不能;并且具有多个语句的过程比具有多个注释的 View 更常见。)但是我们可以演示相同的类型问题的关键 - 问问自己,如果您不将两个 View 分成各自的批处理,您如何知道哪个 View 应该拥有 comment4

-- comment1
CREATE VIEW dbo.view1
AS
-- comment2
SELECT
-- comment3
* from sys.objects
-- comment4
CREATE VIEW dbo.view2
AS
-- comment5
SELECT
-- comment6
* from sys.objects

在 Management Studio 中,您可以通过在对象脚本之间放置 GO 来解决此问题。请注意,GO 不是 T-SQL,它是特定于应用程序的批处理分隔符;从其他接口(interface),您将需要以其他方式单独传输批处理。

同样,答案就在第一句话中:用于创建或更改 SQL Server 中任何模块的脚本 - 包括 View 、过程、函数和触发器 - 必须是唯一语句在批处理中

关于sql - 为什么 CREATE VIEW 必须是批处理中的第一个语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18465777/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com