sql语句go附近出现语法错误

时间:2022-12-26 15:08:20
直接写上去,提示:消息 111,级别 15,状态 1,过程 usp_upGrade,第 1 行
'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。


if exists(select * from sys.objects where name='usp_upGrade')
drop proc usp_upGrade

create procedure usp_upGrade
as
declare @count int,@failcount int
select @count=COUNT(*) from Score
select @failcount=COUNT(*) from Score where english<60
while (@count/2 <@failcount)
begin
update Score set english=english+2 
select @count=count(*) from Score where english<60
end
update Score set english=100 where english>100

然后修改一下,在create前面加上go,提示:消息 102,级别 15,状态 1,第 1 行
“go”附近有语法错误。
消息 111,级别 15,状态 1,第 1 行
'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。

if exists(select * from sys.objects where name='usp_upGrade')
drop proc usp_upGrade
go
create procedure usp_upGrade
as
declare @count int,@failcount int
select @count=COUNT(*) from Score
select @failcount=COUNT(*) from Score where english<60
while (@count/2 <@failcount)
begin
update Score set english=english+2 
select @count=count(*) from Score where english<60
end
update Score set english=100 where english>100


将两个部分的代码分开运行就可以得到结果,但是连在一起就会报错,再在存储过程结尾加个go,会提示:消息 102,级别 15,状态 1,第 1 行
“go”附近有语法错误。
消息 111,级别 15,状态 1,第 1 行
'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。
消息 102,级别 15,状态 1,第 1 行
“go”附近有语法错误。


if exists(select * from sys.objects where name='usp_upGrade')
drop proc usp_upGrade
go
create procedure usp_upGrade
as
declare @count int,@failcount int
select @count=COUNT(*) from Score
select @failcount=COUNT(*) from Score where english<60
while (@count/2 <@failcount)
begin
update Score set english=english+2 
select @count=count(*) from Score where english<60
end
update Score set english=100 where english>100
go

这是什么问题呢?求解啊,该怎么才能让他们连在一起运行呢。我用的sql2012的查询器

8 个解决方案

#1


sql语句go附近出现语法错误我的2014直接执行你最后一个代码,没报错

#2


好奇怪的2012,在CREATE前面加个;试下,
实现不行,把前面的那块放到EXEC里,
这边SQL2005是可以的,而且很常见的写法

#3


引用 2 楼 ky_min 的回复:
好奇怪的2012,在CREATE前面加个;试下,
实现不行,把前面的那块放到EXEC里,
这边SQL2005是可以的,而且很常见的写法

还是报错,纠结。

#4


我在 SQL SERVER 2012上运行成功  看来不是你这段代码的问题。

有可能你的查询分析器里面有N段代码。

#5


引用 4 楼 fredrickhu 的回复:
我在 SQL SERVER 2012上运行成功  看来不是你这段代码的问题。

有可能你的查询分析器里面有N段代码。

我专门新建查询测试,还是通不过,纠结。

#6


05,08r2均测试了你的代码没有问题啊
可以在if 前加个go和存储过程后加个go试试

#7


代码没问题,把这个贴子里面的代码直接复制一你的SSMS里面看看行不行,
可能是你的输入法全半角问题吧。

#8


引用 7 楼 tangguangqiang 的回复:
代码没问题,把这个贴子里面的代码直接复制一你的SSMS里面看看行不行,
可能是你的输入法全半角问题吧。

虽然没测试,但感觉应该是这个问题吧。。。

#1


sql语句go附近出现语法错误我的2014直接执行你最后一个代码,没报错

#2


好奇怪的2012,在CREATE前面加个;试下,
实现不行,把前面的那块放到EXEC里,
这边SQL2005是可以的,而且很常见的写法

#3


引用 2 楼 ky_min 的回复:
好奇怪的2012,在CREATE前面加个;试下,
实现不行,把前面的那块放到EXEC里,
这边SQL2005是可以的,而且很常见的写法

还是报错,纠结。

#4


我在 SQL SERVER 2012上运行成功  看来不是你这段代码的问题。

有可能你的查询分析器里面有N段代码。

#5


引用 4 楼 fredrickhu 的回复:
我在 SQL SERVER 2012上运行成功  看来不是你这段代码的问题。

有可能你的查询分析器里面有N段代码。

我专门新建查询测试,还是通不过,纠结。

#6


05,08r2均测试了你的代码没有问题啊
可以在if 前加个go和存储过程后加个go试试

#7


代码没问题,把这个贴子里面的代码直接复制一你的SSMS里面看看行不行,
可能是你的输入法全半角问题吧。

#8


引用 7 楼 tangguangqiang 的回复:
代码没问题,把这个贴子里面的代码直接复制一你的SSMS里面看看行不行,
可能是你的输入法全半角问题吧。

虽然没测试,但感觉应该是这个问题吧。。。