2015-12-10 1 views
0

Я пытаюсь вывести, который хранится в Proc используется для возврата определенного набора данных.Как я могу выполнить поиск по схеме базы данных SQL Server, чтобы найти StoredProcs с указанным набором аргументов?

Задача состоит в том, что в базе данных хранится сотни хранимых процедур. Есть ли способ, что я могу запросить схему, чтобы найти все StoredProcs, которые имеют параметры, названные, например:

Unit 
Member 
BegDate 
EndDate 

... или, если не считать, что найти ПЛов, которые занимают четыре арга?

Это немного сузило бы вещи и облегчило бы вопросы.

+0

Посмотрите на PARAMETER_NAME в 'INFORMATION_SCHEMA.PARAMETERS' – ZLK

+0

Все вниз, но девять; установите их на другую аллею, pard. –

ответ

1

Вся информация, которую вы хотите найти о хранимых процедур, вы можете найти в таблицах, как INFORMATION_SCHEMA.PARAMETERS, SYS.PARAMATERS, SYS.PROCEDURES, sys.sql_modules и т.д.

Ваш вопрос может быть решен запрос PARAMETER_NAME в INFORMATION_SCHEMA.PARAMETERS.

например.

; 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 
+0

Действительно ли первая точка с запятой должна быть там? В чем его смысл? –

+0

Это работало как чемпион, хотя я не знаю, почему (я не понимаю использование «;» в начале или «WITH T». В любом случае, я буду впредь думать о вас как о чем-то вроде SQL Server Metaata Whisperer, Zebra Lion Kangaroo. –

+1

@ B.ClayShannon Точка с запятой просто завершает предыдущий оператор (если таковой был). Если не было предыдущего утверждения, он ничего не делает (это безобидно). CTE требуют, чтобы предыдущий оператор был завершен (если был один). – ZLK