Sql server 删除并创建SQL Server过程

Sql server 删除并创建SQL Server过程,sql-server,stored-procedures,Sql Server,Stored Procedures,我试图在一个脚本中删除并创建一个过程。我试过这个: IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'Foo') DROP PROCEDURE Foo GO CREATE PROCEDURE dbo.Foo -- procedure body here 但我有一个错误: “GO”附近的语法不正确 如果我删除GO,我会得到一个错误: “CREATE/ALTER PROCEDURE”必须是查询批处理中的第一

我试图在一个脚本中删除并创建一个过程。我试过这个:

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'Foo')
  DROP PROCEDURE Foo
  GO

CREATE PROCEDURE dbo.Foo
-- procedure body here
但我有一个错误:

“GO”附近的语法不正确

如果我删除
GO
,我会得到一个错误:

“CREATE/ALTER PROCEDURE”必须是查询批处理中的第一条语句

更新
这些脚本是由Java构建工具(Maven)执行的。

GO
在T-SQL中实际上不是一个有效的术语,它只是Microsoft管理工具用来划分查询批的分隔符

您使用什么来运行脚本?如果您试图在代码中执行此操作,则需要将其拆分为两个语句,可能需要使用正则表达式在
^GO$
上拆分

IF OBJECT_ID ('idhere') IS NOT NULL
   DROP PROCEDURE idhere
GO
CREATE PROCEDURE idhere
@paramsHere PARAMTYPE
AS
BEGIN
     //...code here...
END
GO

我就是这样做的,我不确定我的工作使用的是什么版本的SQL SERVER,我相信它是2005年的。

查看Jon Galloway的帖子:


它可能有您正在寻找的答案。

最好使用此语法进行存在性检查:

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[foo]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[foo]
GO

如前所述,如果在任何模式中有一个foo存储过程,它会尝试删除它。但不确定这是否能解决你的问题。如果使用SSMS,则可以选择将存储过程脚本化为DROP和CREATE;这种语法应该可以工作。

我发现,从工具在SSMS之外执行大型脚本的最简单方法是使用。(iSQL pre sql 2005)这将适用于允许您运行shell命令的任何环境

来自MSDN文章

sqlcmd实用程序允许您输入 Transact-SQL语句、系统 程序和脚本文件 命令提示符,在中的查询编辑器中 SQLCMD模式,在Windows脚本文件中 或在操作系统中(Cmd.exe) SQL Server代理作业的作业步骤。 此实用程序使用OLEDB执行 Transact-SQL批处理


是的,我打赌这是在SSMS之外执行的。这不是DROP PROCEDURE foo吗?@SqlACID谢谢,我已经在SSMS中纠正了这一点,或者你正在尝试在SSMS之外执行,就像在Java客户端一样?你能解释一下你试图用Maven和这些SQL命令解决什么更高级别的问题吗?