【问题标题】:How to avoid create view must be the only statement in the batch error?如何避免create view must be the only statement in the batch error?
【发布时间】:2020-01-23 16:16:27
【问题描述】:

CREATE VIEW 部分突出显示为错误,我无法立即运行完整代码(它显示错误)以及如何避免这种情况?

-- Creating pizza view
CREATE VIEW pizza_view
AS
SELECT p.pizza_id
    ,p.pizza_name
    ,p.description AS 'pizza_desc'
    ,t.type_id AS 'range_id'
    ,t.type_name AS 'range_name'
    ,t.price AS 'range_price'
FROM pizza AS p
INNER JOIN type AS t ON p.type_id = t.type_id;

-- Creating side view
CREATE VIEW side_view
AS
SELECT so.order_id
    ,so.side_id
    ,s.side_name
    ,so.qty_ordered AS 'qty'
    ,s.price * so.qty_ordered AS 'total_cost'
FROM side AS s
INNER JOIN side_order AS so ON s.side_id = so.side_id;

-- Creating order view
CREATE VIEW order_view
AS
SELECT p.pizza_id
    ,po.order_id
    ,co.ready
    ,p.pizza_name
    ,t.type_id AS 'range_id'
    ,t.type_name AS 'range_name'
    ,t.price + i.surcharge AS 'cost_of_the_pizza'
FROM pizza AS p
INNER JOIN type AS t ON p.type_id = t.type_id
INNER JOIN pizza_order AS po ON p.pizza_id = po.pizza_id
INNER JOIN customer_order AS co ON po.order_id = co.order_id
INNER JOIN pizza_ingredient AS pi ON p.pizza_id = pi.pizza_id
INNER JOIN ingredient AS i ON pi.ingredient_id = i.ingredient_id;

【问题讨论】:

  • 它显示错误:请分享您收到的错误消息。
  • 在每个 CREATE VIEW 之后尝试使用 GO 语句
  • 我发现我的错误谢谢我放了一个;在 go (GO;) 之后,这就是为什么我使用 go 后它不起作用的原因。
  • @xxdsxx 您也可以尝试一一运行您的查询。
  • @Suraj Kumar 以前我是这样做的,但我需要一次运行完整的代码

标签: sql-server


【解决方案1】:

在这里您需要更正两个问题,例如分隔和不同视图的不同名称。由于错误是为创建视图提供查询,因此存储过程和函数应该在单独的批处理中。

GO 向 SQL Server 实用程序发出一批 Transact-SQL 语句结束的信号。

例如:

Create view <YourViewName>
Select * from <YourViewName> -- This will give error.

这是因为两个语句在同一个批次中。

-- Creating pizza view
CREATE VIEW pizza_view1
AS
SELECT 1 AS a --Your actual view statement here.
GO

-- Creating side view
CREATE VIEW side_view2
AS
SELECT 2 AS b --Your actual view statement here.
GO

-- Creating order view
CREATE VIEW order_view3
AS
SELECT 3 AS c --Your actual view statement here.

您可以找到Documentation of Go here

【讨论】:

  • 只是提醒@xxdsxx 和其他发现此问题的人,“GO”不是 SQL 语句,它是 SQL Server Management Studio (SSMS) 和其他 SQL 工具 (OSQL) 等客户端识别的分隔符.EXE、SQLCMD.EXE 等)。如果您从自己的代码中执行此操作,则需要提交三个单独的批次,每个“CREATE VIEW”在其自己的批次请求中。这就是这些其他实用程序在幕后所做的......“GO”只是一个“批处理分隔符”。
  • @pmbAustin 你说得对,根据 SSMS 或其他编辑器中的设置,Go 也可以更改为其他文本。
猜你喜欢
  • 2020-09-06
  • 2021-03-13
  • 2022-12-02
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
相关资源
最近更新 更多