代码之家  ›  专栏  ›  技术社区  ›  Mike D

创建与GO使用相关的存储过程语法

  •  4
  • Mike D  · 技术社区  · 15 年前

    有人知道为什么吗。

    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, Level 15, State 1, Procedure My_Procedure, Line 1 Incorrect syntax near 'GO'.

    现在,这是批处理的最后一条语句,也许最后一条语句不应该有 GO ?

    10 回复  |  直到 15 年前
        1
  •  11
  •   utexaspunk    14 年前

    如果转到“另存为…”,单击“保存”按钮上的小向下箭头并选择“使用编码保存…”,则可以将行尾设置为Windows(CR LF)。这似乎解决了我的问题。。。

        2
  •  3
  •   Rune Sundling    15 年前

    您当前在问题中使用的sql将正常工作。你在Kev编辑这篇文章之前拥有的未格式化sql不会。原因是,您的GO与sql位于同一行。它需要在一条单独的线上。

        3
  •  3
  •   Dustin Buschow    14 年前

    SQL Server中发布了错误解析GO语句的错误。我相信它是在你能做到的时候介绍的 X ,并执行批处理 多次。

    有时我不得不添加一个评论部分(“ -- )强制解析器终止而不是产生语法错误。当我在一批代码中有400000行时,就会看到这种情况。

    例子:

    打印“这是一个测试。”

    去--

    去5--

        4
  •  2
  •   NeverStopLearning    12 年前

    如果使用Unix/Mac EOL从文本编辑器复制粘贴文本(例如,Notepad++支持此操作),GO将被解释为与最后一条TSQL语句位于同一行(但在屏幕上,您可以正常看到换行符)。在文本编辑器中将EOL转换为Windows(CRLF)修复了该问题。不过很棘手。

        5
  •  1
  •   Paul Rowland    15 年前

    ALTER PROCEDURE My_Procedure
        (@Company varchar(50))  
    AS  
        SELECT PRD_DATE 
        FROM WM_PROPERTY_DATES 
        WITH (NOLOCK) 
        WHERE PRD_COMPANY = @Company GO
    

    Msg 102, Level 15, State 1, Procedure My_Procedure, Line 7
    Incorrect syntax near 'GO'.
    

    注意 第7行 ,原来的问题已提出 第1行 .

    假设您的错误消息是第1行,那么由于某种原因,您的sql中似乎没有正确的CR/LF。

        6
  •  0
  •   Dave Markle    15 年前

        7
  •  0
  •   Raj    15 年前

    我在2008年的服务器上尝试了这种SQL,创建了一个WM_属性_DATES表,并添加了两列PRD_DATE和PRD_COMPANY。

    工作很好,并创建过程。也许你可以试着把你的代码放在BEGIN…END块中,看看问题是否仍然存在。

    拉吉

        8
  •  0
  •   Philip Kelley    15 年前

    你说

    现在,这是a的最后一句话 批处理,也许最后一条语句应该 不试一试吗?

    第一

        9
  •  0
  •   Sebastian Castaldi    8 年前

    在我的例子中,我从一个网页复制了部分代码,似乎用不同的编码保存了该网页,我尝试用不同的编码从SMS中保存为,但没有成功。

    为了解决我的问题,我将代码复制到NodePad中,然后将其保存为ANSI格式并重新打开查询

        10
  •  -1
  •   Remus Rusanu    15 年前

    任何一家严肃的公司都不可能假装对每一家都进行跟踪 陈述 . 也许每次之后 一批 .

    GO不是Transact-SQL语句 . 是ISQLW(又称查询分析器)、osql、sqlcmd和SSMS(ManagementStudio)等工具可以理解的分隔符。这些工具将SQL文件拆分为多个批,以GO(或者准确地说是“批分隔符”集,但通常是GO)分隔,然后一次向服务器发送一个批。服务器永远看不到GO,如果它看到GO,它将报告错误102,语法错误,正如您已经看到的。