SQL Server - Любой способ найти, какие хранимые процедуры возвращают наборы, а какие нет? - PullRequest
2 голосов
/ 14 октября 2011

Мне нужно создать сервис, который предоставляет метаданные о хранимых процедурах в базе данных сервера SQL. Есть ли способ узнать, какие хранимые процедуры возвращают наборы, а какие нет, поэтому их можно вызывать, соответственно, через ExecuteReader или ExecuteNonQuery?

Спасибо

1 Ответ

1 голос
/ 15 октября 2011

Оказывается (я гуглил), что способ сделать это - установить флажок FMTONLY на ON на Sql Server.

См. здесь.

Вот пример, взятый из здесь :

SET FMTONLY ON;

  EXEC dbo.MyTestSproc @param1 = NULL, @param2 = NULL, @param3 = NULL

SET FMTONLY OFF;

В случае, когда сохраненный процессне возвращает никаких данных, вы не увидите никакого вывода (по крайней мере, это было мое наблюдение в SSMS).Когда процедура возвращает данные, вы видите, что имена столбцов отображаются фактически без каких-либо возвращаемых данных.

Так что это своего рода испытание, ошибка, вещь.

ПРИМЕЧАНИЕ: Я протестировал с процедурой, в которой используется параметр с табличным значением, и он не выдал никакого вывода, даже если процедура действительно возвращает данные.Установка параметра в NULL не сработала, и SSMS пожаловалась на неприятную ошибку.Ошибка, по-видимому, связана с тем, что временная таблица используется внутри proc и необязательно с параметром table-value, но все еще не выдает пустой набор результатов:

Msg 208, Level 16, State0, процедура spWh независимо, строка 20 Неверное имя объекта '#temp'.

Глядя на ссылку, опубликованную Майклом, выясняется, что если процедура возвращает разные наборы результатов в зависимости от переданного параметра, дляНапример, невозможно знать наверняка.См. Ответ Марка Гравелла.

...