Sql 创建与GO使用相关的存储过程语法
有人知道为什么吗Sql 创建与GO使用相关的存储过程语法,sql,sql-server,sql-server-2005,stored-procedures,Sql,Sql Server,Sql Server 2005,Stored Procedures,有人知道为什么吗 CREATE PROCEDURE My_Procedure (@Company varchar(50)) AS SELECT PRD_DATE FROM WM_PROPERTY_DATES WITH (NOLOCK) WHERE PRD_COMPANY = @Company GO 在SQL management studio中显示错误消息: Msg 102,15级,状态1,程序我的程序,第1行 “GO”附近的语法不正确。
CREATE PROCEDURE My_Procedure
(@Company varchar(50))
AS
SELECT PRD_DATE
FROM WM_PROPERTY_DATES
WITH (NOLOCK)
WHERE PRD_COMPANY = @Company
GO
在SQL management studio中显示错误消息:
Msg 102,15级,状态1,程序我的程序,第1行
“GO”附近的语法不正确。
现在,这是批处理的最后一个语句,也许最后一个语句不应该有一个GO?您当然可以在批处理的末尾有GO。我看不出这个代码本身有什么问题。在@Company后面加一个分号 任何严肃的公司都不可能假装在每一句话后面加上GO。也许每批之后
GO不是Transact-SQL语句。是ISQLW(又称查询分析器)、osql、sqlcmd和SSMS(ManagementStudio)等工具可以理解的分隔符。这些工具将SQL文件拆分为多个批,以GO(或者准确地说是“批分隔符”集,但通常是GO)分隔,然后一次向服务器发送一个批。服务器从未看到GO,如果它看到GO,它将报告错误102,语法错误,正如您已经看到的。您当前在问题中使用的sql将正常工作。你在Kev编辑这篇文章之前拥有的未格式化sql不会。原因是,您的GO与sql位于同一行。它需要在一条单独的线上 我在2008年的服务器上尝试了这种SQL,创建了一个表WM_PROPERTY_DATES,并添加了两列PRD_DATE和PRD_COMPANY 工作很好,并创建过程。也许你可以试着把你的代码放在BEGIN…END块中,看看问题是否仍然存在 此sql的Raj错误
ALTER PROCEDURE My_Procedure
(@Company varchar(50))
AS
SELECT PRD_DATE
FROM WM_PROPERTY_DATES
WITH (NOLOCK)
WHERE PRD_COMPANY = @Company GO
是
注意第7行,原始问题有第1行
如果我自己动手,SQL就可以正常工作
如果您的错误消息显示第1行,那么由于某种原因,您的sql中似乎没有正确的CR/LF发生。您说过
现在,这是a的最后一句话
批处理,也许最后一条语句应该
不试一试吗
这意味着这些行都是提交给SQL的同一批的一部分。问题是,CREATE PROCEDURE(或CREATE FUNCTION或CREATE VIEW)语句必须是批处理中的第一条语句。所以,在CREATE语句前面放一行“GO”,看看会发生什么
Philip如果您转到“另存为…”,请单击“保存”按钮上的小向下箭头并选择“使用编码保存…”,然后您可以将行尾设置为Windows(CR LF)。这似乎解决了我的问题…SQL Server中发布了一个错误,错误地解析了GO语句。我相信它是在您可以执行GOX并多次执行批处理X时引入的 有时我不得不添加注释部分(“--”),以强制解析器终止,而不是产生语法错误。当我在一批代码中有400000行时,就可以看到这一点 例如: 打印“这是一个测试。” 开始-- 打印“这不是测试。”
GO 5--如果使用Unix/Mac EOL从文本编辑器复制粘贴文本(例如,记事本++支持此功能),GO将被解释为与上一条TSQL语句位于同一行(但在屏幕上,您通常可以看到换行)。在文本编辑器中将EOL转换为Windows(CRLF)修复了该问题。但是非常棘手。在我的例子中,我从一个网页复制了部分代码,似乎用不同的编码保存了该页面,我尝试用不同的编码从SMS保存为,但没有成功
为了解决我的问题,我将代码复制到NodePad中,然后将其保存为ANSI格式,然后重新打开查询如果我不使用GO,那么它可以正常工作。但我们公司的标准是在每条语句后添加GO。谢谢,添加分号没有影响,错误消息结果相同。这绝对是一个有趣的小问题。谢谢你,伙计,但是,这只是它在这个网站上的格式,围棋是自己的路线。网站上的格式现在看起来很好。顺便说一句,我知道现在这里的格式是这样的。但这不是你最初发布它的时候。然后,您将整个sql放在一行上,这与在SSMS中运行的sql相同,这就是为什么您会得到“第1行不正确的语法”。围棋需要在另一条线上有趣的一点,谢谢。你可以看到我的问题,我让你们说,GO必须在一条新线路上,我正在使用返回键,将它放在一条新线路上,但问题仍然存在。Tho,我会更仔细地看你最后的评论和实验。当然,你应该说‘抗争’而不是‘假装’。我敢肯定,我们不会“假装”在每一句话后面加上GO如果发现最后一个DDL的GO有问题,可能的问题是它后面没有CR/LF:文件以GO结尾,而不是GO\r\n。有些工具对此有问题。干杯,在这个例子中,我直接在SQL管理工作室(2005)中运行SQL。无论是添加显式回车还是不包含回车,都不会对问题产生影响。将我使用过的表替换为任何表,这是一个可复制的问题。可能您的文件中只有CR,而不是CR/LF:嗨,Remus,我没有使用文件,我使用的是官方的SQL Management Studio工具,并且肯定有回车符。SQL Management Studio答复:“发生了致命的脚本错误。分析GO时遇到不正确的语法。“仅针对下面的其他人--我不清楚为什么这是公认的答案:)错误消息指向“.”。。第1行..“当明显有超过1行的行时。这意味着要么重新格式化是答案(将GO单独放在一行上),要么解决换行问题(如下面的一些答案)。如果这里的答案不起作用,请下楼看看。并查看下面的评论…”谢谢兄弟,但是,这只是这个网站上的格式化方式,围棋有自己的路线。格式化
Msg 102, Level 15, State 1, Procedure My_Procedure, Line 7
Incorrect syntax near 'GO'.