ストアドプロシージャのパラメーターに関する情報はどこで入手できますか?私の状況では、特定のストアプロシージャの入力パラメータのみを知る必要があります。
の中に sys.objects
プロシージャに関する一般的な詳細のみがあります。 sys.sql_modules
プロシージャのSQLテキスト全体を抽出できます。
As(SQL Server Management studio)では、ALT+F1
プロシージャ名を選択するとき。そのようにして入力パラメータの詳細を抽出できる場所があることを願っています。
select
'Parameter_name' = name,
'Type' = type_name(user_type_id),
'Length' = max_length,
'Prec' = case when type_name(system_type_id) = 'uniqueidentifier'
then precision
else OdbcPrec(system_type_id, max_length, precision) end,
'Scale' = OdbcScale(system_type_id, scale),
'Param_order' = parameter_id,
'Collation' = convert(sysname,
case when system_type_id in (35, 99, 167, 175, 231, 239)
then ServerProperty('collation') end)
from sys.parameters where object_id = object_id('MySchema.MyProcedure')
select * from sys.parameters
inner join sys.procedures on parameters.object_id = procedures.object_id
inner join sys.types on parameters.system_type_id = types.system_type_id AND parameters.user_type_id = types.user_type_id
where procedures.name = 'sp_name'
指定されたプロシージャ名の場合、次のクエリは、すべてのパラメータとその順序を、そのタイプとタイプの長さとともにリストします(VARCHARなどで使用するため)
置換procedure_name
プロシージャの名前。
DECLARE @ProcedureName VARCHAR(MAX) = 'procedure_name'
SELECT
pa.parameter_id AS [order]
, pa.name AS [name]
, UPPER(t.name) AS [type]
, t.max_length AS [length]
FROM sys.parameters AS pa
INNER JOIN sys.procedures AS p on pa.object_id = p.object_id
INNER JOIN sys.types AS t on pa.system_type_id = t.system_type_id AND pa.user_type_id = t.user_type_id
WHERE p.name = @ProcedureName
パラメータを受け入れるオブジェクトの各パラメータの行が含まれます。オブジェクトがスカラー関数の場合、戻り値を記述する単一の行もあります。その行のparameter_id値は0です。
SELECT *
FROM sys.parameters
WHERE object_id = object_id('SchemaName.ProcedureName')
次のクエリは私のために働いた:
SELECT * FROM sys.parameters sp1, sys.procedures sp2 WHERE sp1.object_id = sp2.object_id
パラメーターの順序でより具体的な結果を得るには:
SELECT * FROM sys.parameters sp1, sys.procedures sp2, sys.types st WHERE sp1.object_id = sp2.object_id AND sp2.name = 'usp_nameofstoredprocedure' AND sp1.user_type_id = st.user_type_id ORDER BY sp1.parameter_id asc;
sys.objects
やsys.sysobjects
などのシステムテーブルがあります。
または、INFORMATION_SCHEMA
、特にINFORMATION_SCHEMA.ROUTINES
およびINFORMATION_SCHEMA.ROUTINE_COLUMNS
も確認できます。
ANSI標準INFORMATION_SCHEMA
に含まれているため、SQL Server固有の癖が少なくなります。私見では、ほとんどのことを理解しやすいです。
上記のRajの答えの拡張
;WITH CTE
AS (SELECT OBJECT_NAME(OBJECT_ID) AS sql_module_name
,CASE
WHEN OBJECTPROPERTY(OBJECT_ID,'IsProcedure') = 1 THEN 'Stored Procedure'
WHEN OBJECTPROPERTY(OBJECT_ID,'IsScalarFunction') = 1 THEN 'Scalar Function'
WHEN OBJECTPROPERTY(OBJECT_ID,'IsTableFunction') = 1 THEN 'Table Function'
END AS sql_module_type
,parameter_id AS parameter_order
,name AS parameter_name
,is_nullable AS parameter_is_nullable_flag
,is_output AS parameter_is_output_flag
,TYPE_NAME(user_type_id) AS parameter_type
,max_length AS parameter_length
,CASE
WHEN TYPE_NAME(system_type_id) = 'uniqueidentifier' THEN precision
ELSE OdbcPrec
(system_type_id,max_length,precision
)
END AS parameter_precision
,OdbcScale
(system_type_id,scale
) AS parameter_scale
FROM sys.parameters)
SELECT DENSE_RANK() OVER(
ORDER BY sql_module_type
,sql_module_name ASC) AS group_id
,sql_module_name
,sql_module_type
,parameter_order
,parameter_name
,parameter_is_nullable_flag
,parameter_is_output_flag
,parameter_type
,parameter_length
,parameter_precision
,parameter_scale
FROM CTE
ORDER BY sql_module_type
,sql_module_name
,parameter_order;
おそらく少し遅れますが、検索語Get parameters for all stored procedure on SQL
Googleでこのページを見つけたので、その解決策を投稿します(参加の点で他の回答とは少し異なります)
Select PROCS.name As StoredProcName,TYPE_NAME(user_type_id) As ParameterType,PARAMS.name As Params from sys.procedures PROCS
JOIN sys.parameters PARAMS WITH(NOLOCK) ON PROCS.object_id = PARAMS.object_id
Order by PROCS.object_id
情報スキーマはISO標準のSQLです。 PARAMETERS情報スキーマビューには、現在のデータベースまたは指定されたデータベースのユーザー定義関数およびストアドプロシージャのパラメーターの一覧が表示されます。これは、すべての手順のすべてのパラメーターのリストを取得するために使用するものです。
SELECT SPECIFIC_NAME, PARAMETER_MODE, PARAMETER_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.PARAMETERS
ORDER BY SPECIFIC_NAME
SELECT *
FROM INFORMATION_SCHEMA.PARAMETERS
WHERE SPECIFIC_NAME='proc_name'
ORDER BY ORDINAL_POSITION
(MSSQL 2014でテスト済み)