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'.