数据库版本控制SQL Server 2008删除SP和函数

时间:2009-08-12 13:52:11

标签: sql-server database version-control

我正在编写数据库版本,现在正在寻找一种从C#控制台应用程序中删除所有存储过程和函数的方法。我宁愿不创建一个删除所有存储过程和函数的存储过程。它必须是从C#执行的一些sql。

我尝试在创建之前删除存储过程,但是我收到了这条消息:

  

System.Data.SqlClient.SqlException:   '创建/改变程序'必须是   查询批处理中的第一个语句。

例如,

一个SP的脚本:

DROP PROCEDURE [dbo].[sp_Economatic_LoadJournalEntryFeedbackByData]
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE PROCEDURE [dbo].[sp_Economatic_LoadJournalEntryFeedbackByData]
    @Data VARCHAR(MAX)
AS
BEGIN
    ...
END

所以我想在创建所有SP和函数之前,我需要首先使用一个sql脚本删除所有SP和函数。

2 个答案:

答案 0 :(得分:1)

您可以在放弃之前检查是否存在:

IF EXISTS (SELECT * FROM [dbo].[sysobjects]
           WHERE ID = object_id(N'[dbo].[YourProcName]') AND 
                 OBJECTPROPERTY(id, N'IsProcedure') = 1)
    DROP PROCEDURE [dbo].[YourProcName]
GO

...然后创建它......

我会为您要创建的每个存储过程添加此内容。

答案 1 :(得分:0)

你需要在每个语句块之间加上“GO”。 请参阅:http://msdn.microsoft.com/en-us/library/ms188037.aspx

所以您的上述代码将成为:

DROP PROCEDURE [dbo].[sp_Economatic_LoadJournalEntryFeedbackByData]

-- this makes it execute the above statement, before continuing.
GO

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON

CREATE PROCEDURE [dbo].[sp_Economatic_LoadJournalEntryFeedbackByData]
@Data VARCHAR(MAX)

AS
  BEGIN
    ...
  END