我正在编写数据库版本,现在正在寻找一种从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和函数。
答案 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