SQL Server:如何从存储过程中提取注释以​​进行部署

时间:2009-11-04 07:23:44

标签: sql sql-server tsql sql-server-2008 stored-procedures

我们有很多存储过程都包含很多注释 有没有办法从存储过程中提取注释以​​便部署,以便用户在使用SQL Server Management Studio修改存储过程时无法看到它们?

注意:我们正在使用SQL Server 2008。

3 个答案:

答案 0 :(得分:4)

您可以使用WITH ENCRYPTION选项:

CREATE PROCEDURE dbo.foo 
WITH ENCRYPTION 
AS 
BEGIN 
    SELECT 'foo' 
--Try this just to make sure
END

之前请确保将存储过程的逻辑保存在安全的地方,因为保存后您将无法轻松访问该过程的代码。

之后,用户无法使用企业管理器 sp_helptext 来获取源代码,但这可能会被破解......

答案 1 :(得分:1)

加密很棒,但如果您需要允许用户对存储过程进行更改(如您的初始问题所示),那么加密不是您的答案。它会隐藏用户的评论和代码。

如果您希望保持代码可见但删除注释,则可能需要使用Management Studio编写所有存储过程的脚本,然后使用UltraEdit等宏/文本编辑器查找并删除所有注释,然后运行该注释脚本再次重建所有无评论的存储过程。

答案 2 :(得分:0)

我不相信WITH ENCRYPTION是要走的路,因为它很容易破解。从来没有想过无法解密。即使它不是一个复杂的加密,它确实会影响重新编译时的执行,特别是如果存储过程需要不断重新编译(例如,如果它使用了大量的临时表和游标)。

应该有一种方法来创建一个存储过程来删除 - 和下一个回车之间以及/ * * / containers之间的所有文本,然后将create / alter脚本保存为其他内容,也许在你的例如,质量保证数据库。 sp_execute_sql将非常有用。

如果不是存储过程,则可以使用任何其他应用程序从模式中检索存储过程,然后使用正则表达式执行我刚才描述的操作,并在没有注释的情况下吐出新的alter / create T-SQL代码。