如何以编程方式检索与SQLServerManagementStudioGUI返回的源代码相同的SQLServer存储过程源?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

关于如何以编程方式从SQLServer 2005获取完全相同的存储过程源的任何指针,如在SQLServerManagementStudio中右键单击该存储过程并选择“修改”时?

我正在尝试使用SMO,但是有一些文本上的差异。这个过程总是有创建的,而不是修改的,并且在标题中有一些不同,比如我以编程方式获得的版本中缺少GO。我可以把这些修好,但也许还有更好的办法?

同样,我使用SMSE在SQLServer 2005中。通过VisualStudio 8 2008使用SMO。

示例:表示sp_mysp,右键单击ManagementStudio,选择Modify。

    USE [MY_DB]  
    GO  
    /****** Object:  StoredProcedure [dbo].[sp_mysp]    Script Date: 01/21/2009 17:43:18 ******/  
    SET ANSI_NULLS ON  
    GO  
    SET QUOTED_IDENTIFIER ON  
    GO  
    -- =============================================
    -- Author:      
    -- Create date: 
    -- Description: 
    -- =============================================
    ALTER PROCEDURE [dbo].[sp_mysp]

提问于
用户回答回答于
用户回答回答于

SQLProfiler显示了以下内容:您必须手动编写代码。

SMSE在生成语句时会执行相当长的查询字符串。

下面的查询(或类似的内容)用于提取文本:

SELECT
NULL AS [Text],
ISNULL(smsp.definition, ssmsp.definition) AS [Definition]
FROM
sys.all_objects AS sp
LEFT OUTER JOIN sys.sql_modules AS smsp ON smsp.object_id = sp.object_id
LEFT OUTER JOIN sys.system_sql_modules AS ssmsp ON ssmsp.object_id = sp.object_id
WHERE
(sp.type = N'P' OR sp.type = N'RF' OR sp.type='PC')and(sp.name=N'#test___________________________________________________________________________________________________________________00003EE1' and SCHEMA_NAME(sp.schema_id)=N'dbo')

它返回纯CREATE,然后在代码中用ALTER替换。

SET ANSI NULL以及GO语句和日期都是在此之前的。

扫码关注云+社区