我使用这个查询来获取我的数据库中的所有存储过程(我使用Microsoft SQL Server 2008):
SELECT
SPECIFIC_NAME, ROUTINE_DEFINITION
FROM
INFORMATION_SCHEMA.ROUTINES
对于几乎所有的结果,一切都很好,但是对于具有很长的ROUTINE_DEFINITION
的行,结果被裁剪。
你知道怎么解它吗?
请尝试使用sp_helptext 'ProcedureName'
或您可以使用sys.sql_modules
或OBJECT_DEFINITION([object_id])
函数来获取存储过程文本。所有这些都给出了你的确切代码。Information_Schema.Routines
将放弃最大nvarchar(4000)
如果您使用的是SQL Server Management Studio,那么它有可能不显示存储过程的所有文本(因为我相信每列有8192个字符的限制)。
您可以做的一件事是验证存储在列中的字符串的长度:
SELECT
SPECIFIC_NAME
, ROUTINE_DEFINITION
, LEN(ROUTINE_DEFINITION) [Length in characters]
FROM INFORMATION_SCHEMA.ROUTINES
如果该长度大于8192,则有可能只在显示级别(SSMS)上截断,而不是在存储过程的实际代码中截断。
然而,有一种方法可以增加这个数字,正如这里提到的 -选项(查询结果/SQL Server/结果到网格页)
要更改当前查询的选项,请单击"查询选项"单击"查询"菜单,或右键单击"SQL Server查询"窗口选择查询选项
…
检索到的最大字符数
非XML数据:输入1到65535之间的数字,指定每个单元格中显示的最大字符数。
试试这个:
SELECT
SPECIFIC_NAME, cast(ROUTINE_DEFINITION AS VARCHAR(MAX))
FROM INFORMATION_SCHEMA.ROUTINES