CREATE VIEW 必须是批处理 MS SQL Server 中的唯一语句
Posted
技术标签:
【中文标题】CREATE VIEW 必须是批处理 MS SQL Server 中的唯一语句【英文标题】:CREATE VIEW must be the only statement in the batch MS SQL Server 【发布时间】:2020-12-03 17:36:58 【问题描述】:Microsoft SQL Server Management Studio 18 显示错误:
CREATE VIEW 必须是批处理中的唯一语句
执行请求后,出现如下错误:
“select”关键字周围的语法不正确
create view revenue0 (supplier_no, total_revenue) as
select
l_suppkey,
sum(l_extendedprice * (1 - l_discount))
from
lineitem
where
l_shipdate >= '1996-05-01'
and l_shipdate < dateadd(mm,3,cast('1996-05-01' as datetime))
group by
l_suppkey;
select
s_suppkey,
s_name,
s_address,
s_phone,
total_revenue
from
supplier,
revenue0
where
s_suppkey = supplier_no
and total_revenue = (
select
max(total_revenue)
from
revenue0
)
order by
s_suppkey
option (maxdop 2)
drop view revenue0
UPD。我尝试使用这种方法运行:
create view revenue0 (supplier_no, total_revenue) as
select
l_suppkey,
sum(l_extendedprice * (1 - l_discount))
from
lineitem
where
l_shipdate >= cast('1996-05-01' as datetime)
and l_shipdate < dateadd(mm, 3, cast('1996-05-01' as datetime))
group by
l_suppkey;
go
select
s_suppkey,
s_name,
s_address,
s_phone,
total_revenue
from
supplier,
revenue0
where
s_suppkey = supplier_no
and total_revenue = (
select
max(total_revenue)
from
revenue0
)
order by
s_suppkey;
drop view revenue0;
但是作为执行请求的结果,显示错误: 无效的对象名称“revenue0”。 只要我没有改名。 SQL 都以这个名字发誓。
UPD2。这个问题是独立解决的。话题已关闭!谢谢大家的努力!
【问题讨论】:
在视图定义后面加上GO
这个词。
你能告诉我具体在哪里吗?我不太擅长 SQL。非常感谢!
group by l_suppkey; GO
围绕“go”构造的语法不正确。
你不能在视图中使用“order by”,重新设计你的视图以不使用它。
【参考方案1】:
错误告诉您 CREATE VIEW 必须是批处理中的唯一语句。正如 Gordon 所说,批处理在 SQL Server 中以“GO”关键字结束,因此您的代码应如下所示:
create view revenue0 (supplier_no, total_revenue) as
select
l_suppkey,
sum(l_extendedprice * (1 - l_discount))
from
lineitem
where
l_shipdate >= '1996-05-01'
and l_shipdate < dateadd(mm,3,cast('1996-05-01' as datetime))
group by
l_suppkey;
GO -- right here. This ends a batch. Must be on a new line, with no semi-color, or SQL gets pissy.
select
s_suppkey,
s_name,
s_address,
s_phone,
total_revenue
from
supplier,
revenue0
where
s_suppkey = supplier_no
and total_revenue = (
select
max(total_revenue)
from
revenue0
)
order by
s_suppkey
option (maxdop 2);
drop view revenue0;
【讨论】:
我正在测试“MS-SQL-Server 上的 TPC-H 测试”这些东西:link。执行此请求时,应为:link. 但是,经过您的更正,执行 SQL 查询后,输出是一个空表。请求执行时间为 0 秒。这不正常。 您可以帮助重新制作此查询以使其正常工作:link。 我已经和他断了头。但是这个特定的查询不想工作。其余的都在工作。以上是关于CREATE VIEW 必须是批处理 MS SQL Server 中的唯一语句的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 视图的创建- (create view必须是批处理中仅有的语句)
sql server 2008数据库提示错误create view必须是批处理中仅有的语句
sql 建立视图中 一直遇到Create view必须是批处理中仅有的语句报错