Sql server 语法不正确:Create Procedure必须是批处理中的唯一语句

Sql server 语法不正确:Create Procedure必须是批处理中的唯一语句,sql-server,stored-procedures,Sql Server,Stored Procedures,这个问题以前有人问过,但都涉及到使用“go”,我在这里不需要,至少我相信是这样 我跟着这个图坦卡蒙,接近1点25分。他的似乎执行了,而我的却没有 Select * From Snacks Create Proc spGetSnackByID @Id int as Begin Select Id, Name, Location from Snacks where Id = @Id End 下面是确切的错误,用“BEGIN”语句突

这个问题以前有人问过,但都涉及到使用“go”,我在这里不需要,至少我相信是这样

我跟着这个图坦卡蒙,接近1点25分。他的似乎执行了,而我的却没有

    Select * From Snacks

    Create Proc spGetSnackByID
    @Id int
    as

    Begin
    Select Id, Name, Location
    from Snacks where Id = @Id
    End
下面是确切的错误,用“BEGIN”语句突出显示:

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

是的,SQL Server希望CREATE PROCEDURE作为第一行。只需注释掉上面的select,它不是您想要的,因为您已经在存储过程中指定了字段

如果希望保持脚本的原样(选择后是创建过程),可以在
NVARCHAR
中构造存储过程的创建,并使用
sp\u executesql
执行
it。这样,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
';

是的,SQL Server希望创建过程作为第一行。请注意上面的选择,这不是您想要的,因为您已经在存储过程中指定了字段。哦,是的,这很有效,谢谢!