Sql-Server

我們如何獲得過程的輸出欄位?

  • June 25, 2019

我已經編寫了一個程序,但我想在不執行該過程的情況下找出輸出中的哪些列(欄位)?

目前您已經標記了sql-server-2012sql-server-2008

如果 2012 是正確的,您可以使用sp_describe_first_result_set受到一些限制。

如果您的程序不符合條件,sp_describe_first_result_set或者您執行的版本不支持它,您將不得不檢查原始碼 - 我首選的提取方法是object_definition()函式,儘管許多人更喜歡sp_helptext

OPENROWSET從任意查詢返回一個表。那個查詢可以exec some_procedure。結果可用於使用select .. into語法定義新表。可以檢查這個新表的元數據以找到 SP 輸出的定義。

drop procedure if exists SomeProc;
go

create or alter procedure SomeProc
as begin
   select
       a = CONVERT(bit, 1),
       b = CONVERT(int, 2)
end
go

drop table if exists SomeTable;
go

select *
into SomeTable 
from openrowset
(
   'SQLNCLI', 
   'Server=localhost;Trusted_Connection=yes;',
   'EXEC SomeProc'
);
go

select * from SomeTable;
go

select
   *
from sys.all_columns
where object_id = OBJECT_ID('SomeTable');

引用自:https://dba.stackexchange.com/questions/241217