Есть ли способ при выполнении хранимой процедуры в Management Studio получить возвращаемые типы данных возвращаемых наборов результатов? Я ищу что-то вроде функциональности, когда вы передаете имя таблицы в sp_help.Как определить типы данных после выполнения хранимой процедуры?
ответ
Непростой способ приходит на ум без синтаксического анализа, чтобы увидеть, что он запрашивает. Если вы можете редактировать SP для выбора XML, вы можете добавить XML_INFO в запрос, чтобы вернуть схему.
Вы можете просмотреть типы, если вы вызываете хранимую процедуру через ADO, ADO.NET, ODBC или подобные: результирующие наборы записей имеют информацию о типе, которую вы ищете. Вы действительно ограничены Management Studio?
Вы всегда можете использовать фактическую таблицу, которая является уникальной для 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
На самом деле, вы можете сделать это изнутри 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')
Хотя, я думаю, что должно быть лучше.
Это не самое элегантное решение, но вы можете использовать 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
Лучше всего было бы изменить хранимую процедуру к функции. Но это работает только в том случае, если это позволяет ваша среда.