语法错误:创建过程必须是批处理中的唯一语句

JP *_*aum 3 sql-server stored-procedures

之前已经问过这个问题,但是所有问题都涉及使用“ go”,我在这里不需要,至少我相信是这样。

我正在严格按照1:25标记跟随此教程https://www.youtube.com/watch?v=-xMGwiV5A6o。而他的似乎执行,而我的却没有执行。

    Select * From Snacks

    Create Proc spGetSnackByID
    @Id int
    as

    Begin
    Select Id, Name, Location
    from Snacks where Id = @Id
    End
Run Code Online (Sandbox Code Playgroud)

这是确切的错误,用“ BEGIN”语句突出显示:

“消息111,级别15,状态1,过程spGetSnackByID,第7行'CREATE / ALTER PROCEDURE'必须是查询批处理中的第一条语句。”

TT.*_*TT. 5

如果你想保持剧本,因为它是(选择后跟一个创造的过程),就可以构建存储过程创建一个NVARCHAREXECUTE它使用sp_executesql。这样CREATE语句就是第一个语句。像这样:

Select * From Snacks

EXECUTE sp_executesql N'
  Create Proc spGetSnackByID
  @Id int
  as
  Begin
    Select Id, Name, Location
    from Snacks where Id = @Id
  End
';
Run Code Online (Sandbox Code Playgroud)


Chu*_*uck 4

是的,SQL Server 希望创建过程作为第一行。把上面的select注释掉就可以了,反正也不是你想要的,因为你已经指定了存储过程中的字段。