为什么sql server使用带字符串的sp_executesql语句生成存储过程?

Mar*_*ark 14 sql-server

当我手动生成sql架构创建脚本时,我通常只调用'Create Procedure ...',但是我注意到当你使用Tasks/Generate Scripts选项生成脚本时,它使用'spexecutesql @statement = ..',例如

    EXEC dbo.sp_executesql @statement = N'-- =============================================
    -- Author:      Me
    -- Create date: 20/03/2009
    -- Description: Does stuff
    -- =============================================
    CREATE PROCEDURE [dbo].[MyProc]
        -- Add the parameters for the stored procedure here
        @StartDate datetime
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
    ...
END
'
Run Code Online (Sandbox Code Playgroud)

为什么是这样?是保留评论吗?谢谢

Mic*_*ren 22

它与评论无关.只有当你告诉它"包括IF NOT EXISTS"时才会这样做.原因是它只能以编程方式包含或排除对象(如果它们是动态执行的).

您可以通过在Options\SQL Server Object Explorer\Scripting中选择"False"来禁用此存储过程 - 检查对象是否存在.

  • 我不确定这是真的.我经常写"IF NOT EXISTS"类型的防护,并且不使用sp_executesql执行脚本 (4认同)