SQL Server 2005 определяет тип вывода хранимой процедуры - PullRequest
1 голос
/ 07 сентября 2010

Я работаю в устаревшей системе, и мне нужно вызвать хранимую процедуру, чтобы получить нужные мне данные. Проблема в том, что я понятия не имею, каков формат выходного столбца. Если не вдаваться в хранимую процедуру и выяснить формат выходного столбца из SQL, есть ли способ узнать, какие типы выходных столбцов? Я могу нормально запустить хранимую процедуру, но код беспорядок, и я бы предпочел рассматривать ее как черный ящик, если бы мог.

РЕДАКТИРОВАТЬ: Я знаю, что я не могу определить это по метаданным базы данных, поскольку процедура может возвращать разные результаты в зависимости от того, что ввод. Думаю, мне следует перефразировать мой вопрос: как определить тип столбца с учетом набора результатов из хранимой процедуры?

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

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

Когда вы вызываете хранимую процедуру, все, что вы получаете, это набор столбцов и набор строк. Нет доступной информации о типах этих столбцов. Лучшее, что вы можете сделать, это угадать - если данные содержат буквенно-цифровые символы, это поле VARCHAR / string. Если он имеет только числовые цифры и, возможно, десятичный разделитель, это, вероятно, будет INT или DECIMAL (или MONEY или SMALLMONEY - точно сказать не могу). Если оно выглядит как ДАТА и может быть преобразовано в ДАТУ, это, вероятно, ДАТА, ДАТАЙМ, ДАТАЙМ2 или что-то подобное.

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

0 голосов
/ 07 сентября 2010

что вы будете делать, если сохраненный процесс выдаст разные результирующие наборы в зависимости от того, что передано в ... например

create procedure Test
@var int
as
if @var =1
begin
select col1,col2 from table1
end
else if @var =2
begin
select col4,col2 ,col5,col1 from table2
end
else 
begin
select * from table3
end

Есть опции SET, но они устарели

SET FMTONLY ON;
GO
exec YourProc
GO
SET FMTONLY OFF;
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...