【问题标题】:How can I search through a SQL Server database schema to find StoredProcs with a specified set of args?如何搜索 SQL Server 数据库架构以查找具有指定参数集的 StoredProcs?
【发布时间】:2016-03-16 17:49:30
【问题描述】:

我试图推断哪个存储过程用于返回一组特定的数据。

挑战在于数据库有数百个存储过程。有没有一种方法可以查询架构以找到所有具有命名参数的 StoredProcs,例如:

Unit
Member
BegDate
EndDate

...或者,除此之外,找到需要四个参数的 SP?

这会缩小一些范围并改善问题。

【问题讨论】:

  • INFORMATION_SCHEMA.PARAMETERS中寻找PARAMETER_NAME
  • 只有九个;把他们安排在另一条小巷里,pard。

标签: sql-server schema database-schema database-metadata


【解决方案1】:

您想查找的有关存储过程的所有信息,都可以在 INFORMATION_SCHEMA.PARAMETERS、SYS.PARAMATERS、SYS.PROCEDURES、SYS.SQL_MODULES 等表中找到。

您的问题可以通过查询 INFORMATION_SCHEMA.PARAMETERS 中的 PARAMETER_NAME 来解决。

例如

; WITH T AS (SELECT [specific_name] FROM information_schema.parameters WHERE [parameter_name] = '@Unit'
UNION ALL
SELECT [specific_name] FROM information_schema.parameters WHERE [parameter_name] = '@Member'
UNION ALL
SELECT [specific_name] FROM information_schema.parameters WHERE [parameter_name] = '@BegDate'
UNION ALL
SELECT [specific_name] FROM information_schema.parameters WHERE [parameter_name] = '@EndDate')
SELECT [specific_name] 
FROM T
GROUP BY [specific_name] HAVING COUNT(*) = 4

或者只查找所有带有 4 个参数的程序:

SELECT [specific_name] FROM information_schema.parameters GROUP BY [specific_name] HAVING COUNT(*) = 4

【讨论】:

  • 开头的分号真的应该在那里吗?它存在的理由是什么?
  • 这就像一个冠军,虽然我不知道为什么(我不明白开头的“;”或“WITH T”的用法。无论如何,我以后会想起你作为 SQL Server 元数据窃听者,斑马狮子袋鼠。
  • @B.ClayShannon 分号只是终止前一个语句(如果有的话)。如果没有先前的声明,它什么也不做(它是无害的)。 CTE 要求终止前一个语句(如果有的话)。
猜你喜欢
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2010-11-13
相关资源
最近更新 更多