2008-08-28 6 views
3

Есть ли способ при выполнении хранимой процедуры в Management Studio получить возвращаемые типы данных возвращаемых наборов результатов? Я ищу что-то вроде функциональности, когда вы передаете имя таблицы в sp_help.Как определить типы данных после выполнения хранимой процедуры?

ответ

0

Непростой способ приходит на ум без синтаксического анализа, чтобы увидеть, что он запрашивает. Если вы можете редактировать SP для выбора XML, вы можете добавить XML_INFO в запрос, чтобы вернуть схему.

1

Вы можете просмотреть типы, если вы вызываете хранимую процедуру через ADO, ADO.NET, ODBC или подобные: результирующие наборы записей имеют информацию о типе, которую вы ищете. Вы действительно ограничены Management Studio?

-1

Вы всегда можете использовать фактическую таблицу, которая является уникальной для garrenteed. Это кулдж, но это вариант. Однако это не будет работать внутри хранимой процедуры.

if exists (select * from sys.tables where name = 'tmp_TableName') 
    drop table tmp_TableName 
go 
select * into tmp_TableName from MyTable 

--do some stuff 

go 
if exists (select * from sys.tables where name = 'tmp_TableName') 
    drop table tmp_TableName 
go 
0

На самом деле, вы можете сделать это изнутри SP:

EXEC ('if exists (select * from sys.tables where name = ''tmp_TableName'') drop table tmp_TableName') 

EXEC ('select * into tmp_TableName from MyTable') 

-- Grab the column types from INFORMATION_SCHEMA here 

EXEC ('if exists (select * from sys.tables where name = ''tmp_TableName'') drop table tmp_TableName') 

Хотя, я думаю, что должно быть лучше.

0

Это не самое элегантное решение, но вы можете использовать OPENROWSET, чтобы поместить сохраненные результаты proc в таблицу, а затем использовать sp_help, чтобы получить его описание.

например

select * into tmp_Results 
from openrowset('SQLOLEDB.1' 
       , 'Server=your_server_name;Trusted_Connection=yes;' 
       , 'exec your_stored_proc') 
exec sp_help 'tmp_Results' 
drop table tmp_Results 
1

Лучше всего было бы изменить хранимую процедуру к функции. Но это работает только в том случае, если это позволяет ваша среда.