首页 > 解决方案 > 从不同数据库获取存储过程参数的通用方法

问题描述

我正在尝试向当前为 MSSQL 编写的应用程序添加对 PostgreSQL 的支持。在 C# 中,我希望尽可能使用“一个代码供所有人使用”。

有一堆存储过程,它们在 Postgres 中被重写为函数。在代码中,为了检索 sp 参数元数据,曾经有特定于 ms 的sp_procedure_params_rowset. 我将其更改为:

select p.data_type, p.parameter_name, p.ordinal_position, p.parameter_mode
from information_schema."routines" r 
join information_schema.parameters p on r.specific_name=p.specific_name
where r.routine_schema = 'schema' and r.routine_name = 'procedure_name' 

这适用于 Postgres,但是,对于 MSSQL,parameter_mode 对于设置为输出的参数是 INOUT。例如CREATE PROCEDURE [sp_login] @login varchar(50), @uid int output...将返回

varchar @login  1   IN
int     @uid    2   INOUT

现在代码对于 MSSQL 失败了,因为它需要参数 @uid。

MSSQL 是否有理由在 information_schema.parameters INOUT 中说实际上它是一个 OUT 参数?

是否有从不同数据库检索元数据的“通用”方法?或者没有办法解决它,我必须在 C# 中编写一些条件?

标签: sql-serverpostgresqlstored-procedures

解决方案


推荐阅读