为什么SQL Server中的sp_helptext会返回不同的结果?

时间:2017-03-01 09:25:49

标签: sql-server tsql

我正在构建一个搜索sp_helptext结果的查询,但有时会sp_helptext输出:

enter image description here

而不是:

enter image description here

无论如何,我每次都会获得sp_helptext的首选回复格式吗?

是什么导致图像1发生?

1 个答案:

答案 0 :(得分:2)

sp_helptext内置了一些故意的怪癖,还有一些"意外的"行为。

我把它放在引号中,因为大多数使用它的人实际上并没有阅读documentation,更不用说进入系统程序并查看程序本身的实际定义。

我倾向于使用存储在系统表中的定义:

SELECT definition
FROM sys.all_sql_modules S 
WHERE OBJECT_NAME(S.object_id) = 'MySProc'
;

这通常会在某些方面给我更一致的结果,并且还允许我在需要时立即进行更改。使用sp_helptext,很多人将输出存储在变量中,然后修改变量值;如果SELECT直接来自sys.all_sql_modules,您可以直接对返回的值执行所需的修改,而无需任何变量操作。

(顺便说一句,此同样的查询适用于sp_helptext本身,欢迎您查看其定义,以了解其所做的事情和内容是什么发生在你的定义中。只要确保你不小心ALTER它......)

我知道这并没有完全回答你的问题"为什么会这样?",我希望其他人的回复可以帮助你。在此期间,您可以尝试查看系统表,看看他们是否会为您提供可行的解决方案。

祝你好运!

首先编辑: 如果您正在寻找依赖项,那么根据您的SQL版本,您可以使用:

SELECT 
    ISNULL(D.referenced_server_name,@@SERVERNAME) + '.' + ISNULL(D.referenced_database_name,DB_NAME()) + '.' + D.Referenced_Entity_Name AS [Referenced Tables]
FROM sys.procedures P
INNER JOIN sys.sql_expression_dependencies D
    ON P.object_id = D.referencing_id
WHERE P.name = 'MySProc'
;

返回连接字符串:

[Referenced Tables]
--------------------
ServerName\InstanceName.DBName.TableName