sql server—如果routine_definition大于4000个字符,获取存储过程裁剪结果的sql查询



我使用这个查询来获取我的数据库中的所有存储过程(我使用Microsoft SQL Server 2008):

 SELECT
     SPECIFIC_NAME, ROUTINE_DEFINITION
 FROM 
     INFORMATION_SCHEMA.ROUTINES

对于几乎所有的结果,一切都很好,但是对于具有很长的ROUTINE_DEFINITION的行,结果被裁剪。

你知道怎么解它吗?

请尝试使用sp_helptext 'ProcedureName'或您可以使用sys.sql_modulesOBJECT_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

最新更新