sql - 将存储过程的文本获取到SQL Server中的变量中

标签 sql stored-procedures sql-server-2008-r2

我想遍历几个存储的过程,并从每个过程中提取一个字符串以用于另一个过程(基本上是4部分的远程服务器字符串)

因此,我可以将存储的procs列表从SysObjects(类型= P)放入一个表中,然后在每个表上调用sp_helptext的表变量中循环或游标。

但是,如何将sp_helptext的文本结果转换为变量,以便可以对单词“ BOCTEST ”等进行CharIndex操作?

是否存在像sys.procedures这样的表来存储文本。

最佳答案

可移植的方法是使用ANSI/ISO View INFORMATION_SCHEMA.ROUTINES,但是您只会得到存储过程定义的前4000个字符:

declare @source_code varchar(max)

select @source_code = t.ROUTINE_DEFINITION
from information_schema.routines t
where specific_schema = 'owner-schema'             -- e.g., dbo
  and specific_name   = 'my_stored_procedure_name' -- your stored procedure name here

或者,您可以按照相同的方式使用系统 View sys.sql_modules:
declare @source_code varchar(max)

select @source_code = definition
from sys.sql_modules
where object_id = object_id('dbo.my_stored_procedure_name')

或者,最简单的方法:
declare @source_code varchar(max)
set @source_code = object_definition( 'dbo.my_stored_procedure_name' )

关于sql - 将存储过程的文本获取到SQL Server中的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21708681/

相关文章:

mysql - 来自触发器 MySQL 的结果集

mysql - 如何更新您在 SELECT 语句中使用的同一个表

mysql - 在存储过程中连接 3 个表时出现重复输出

mysql - 如何调用mysql中的存储过程?

sql - 为每个 sql 查询输出指定标题

SQL Server 2008R2 - 从多个表插入

mysql - 如何将 SQL 别名与变量一起使用

sql - 创建一个 Mysql View 以从不同的表中选择列

尽管 SQL 查询有效,但 Azure 门户中的 Azure 存储过程不起作用

sql-server - 您如何知道自上次使用以来 SQL 表是否已更改?