批量编译所有存储过程

时间:2015-08-08 05:04:15

标签: sql-server stored-procedures

我尝试批量编译SSMS中的所有存储过程。但是只编译了第一个存储过程,然后对于其他过程显示" 已经存在一个对象...... "我将所有程序保存在一个编辑器中然后尝试编译[F5]程序但得到错误。请建议如何批量编译所有程序。

以下是我想要做的示例:

USE [TESTDB]    
IF OBJECTPROPERTY(object_id('[dbo].[p_get_Codes]'), N'IsProcedure') = 1
    DROP PROCEDURE [dbo].[p_get_Codes]
    GO
    /****** Object:  StoredProcedure [dbo].[p_get_Codes]    Script Date: 8/8/2015 8:56:32 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create proc [dbo].[p_get_Codes]
    as

    begin
    SET NOCOUNT ON;
        begin
            --- my stored procedure
        end
    SET NOCOUNT OFF;
    end;


    IF OBJECTPROPERTY(object_id('[dbo].[p_get_retailers]'), N'IsProcedure') = 1
    DROP PROCEDURE [dbo].[p_get_retailers]

    GO
    /****** Object:  StoredProcedure [dbo].[p_get_retailers]    Script Date: 8/8/2015 8:58:43 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create proc [dbo].[p_get_retailers]
    as

    begin
    SET NOCOUNT ON;
        begin
            --- my stored procedure
        end
    SET NOCOUNT OFF;
    end;


    IF OBJECTPROPERTY(object_id('[dbo].[p_get_Buyers]'), N'IsProcedure') = 1
    DROP PROCEDURE [dbo].[p_get_Buyers]
    GO
    /****** Object:  StoredProcedure [dbo].[p_get_Buyers]    Script Date: 8/8/2015 10:17:53 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create proc [dbo].[p_get_Buyers]
    as
    begin
    SET NOCOUNT ON;
        begin   
            --- my stored procedure
        end 
    SET NOCOUNT OFF;
    end;


    IF OBJECTPROPERTY(object_id('[dbo].[p_get_seller_groups]'), N'IsProcedure') = 1
    DROP PROCEDURE [dbo].[p_get_seller_groups]
    GO
    /****** Object:  StoredProcedure [dbo].[p_get_seller_groups]    Script Date: 8/8/2015 10:23:39 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create proc [dbo].[p_get_seller_groups]

    as
    begin
    SET NOCOUNT ON;
        begin
            --- my stored procedure 
        end 
    SET NOCOUNT OFF;
    end;

谢谢!

1 个答案:

答案 0 :(得分:1)

在每个检查存储过程存在的go语句之前添加IF

你的脚本应该是这个

USE [TESTDB]    
IF OBJECTPROPERTY(object_id('[dbo].[p_get_Codes]'), N'IsProcedure') = 1
    DROP PROCEDURE [dbo].[p_get_Codes]
    GO
    /****** Object:  StoredProcedure [dbo].[p_get_Codes]    Script Date: 8/8/2015 8:56:32 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create proc [dbo].[p_get_Codes]
    as

    begin
    SET NOCOUNT ON;
        begin
            --- my stored procedure
        end
    SET NOCOUNT OFF;
    end;

GO
    IF OBJECTPROPERTY(object_id('[dbo].[p_get_retailers]'), N'IsProcedure') = 1
    DROP PROCEDURE [dbo].[p_get_retailers]

    GO
    /****** Object:  StoredProcedure [dbo].[p_get_retailers]    Script Date: 8/8/2015 8:58:43 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create proc [dbo].[p_get_retailers]
    as

    begin
    SET NOCOUNT ON;
        begin
            --- my stored procedure
        end
    SET NOCOUNT OFF;
    end;

GO
    IF OBJECTPROPERTY(object_id('[dbo].[p_get_Buyers]'), N'IsProcedure') = 1
    DROP PROCEDURE [dbo].[p_get_Buyers]
    GO
    /****** Object:  StoredProcedure [dbo].[p_get_Buyers]    Script Date: 8/8/2015 10:17:53 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create proc [dbo].[p_get_Buyers]
    as
    begin
    SET NOCOUNT ON;
        begin   
            --- my stored procedure
        end 
    SET NOCOUNT OFF;
    end;

GO
    IF OBJECTPROPERTY(object_id('[dbo].[p_get_seller_groups]'), N'IsProcedure') = 1
    DROP PROCEDURE [dbo].[p_get_seller_groups]
    GO
    /****** Object:  StoredProcedure [dbo].[p_get_seller_groups]    Script Date: 8/8/2015 10:23:39 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create proc [dbo].[p_get_seller_groups]

    as
    begin
    SET NOCOUNT ON;
        begin
            --- my stored procedure 
        end 
    SET NOCOUNT OFF;
    end;