我正在构建一个搜索sp_helptext
结果的查询,但有时会sp_helptext
输出:
而不是:
无论如何,我每次都会获得sp_helptext
的首选回复格式吗?
是什么导致图像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