基于给定的 TSQL 存储过程自动生成 ExecuteSqlCommand 或 SqlQuery 调用的任何方法



我有许多存储过程需要用System.Data.Entity.Database.ExecuteSqlCommandSystem.Data.Entity.Database.SqlQuery调用

我的存储过程需要许多参数,包括输出参数。手动编码参数创建可能需要一些时间,并且可能是错误的。

有没有办法基于给定的 T-SQL 存储过程自动生成ExecuteSqlCommandSqlQuery调用?

我知道我可以使用.edmx模型,但据我所知,.edmx模型都使用函数导入。我喜欢直接拨打ExecuteSqlCommandSqlQuery电话。

本身不是一个完整的解决方案,但下面是一些 SQL 查询,它们将返回必要的存储过程参数和结果信息。您可以将这些模板与 T4 模板(或类似模板(一起使用,以生成数据访问代码。

存储过程参数:

select
    schema_name(sp.schema_id) as schema_name,
    sp.name as procedure_name,
    p.name as parameter_name,
    typ.name as type_name,
    p.max_length,
    p.precision,
    p.scale,
    p.is_output
from sys.procedures sp
left join sys.parameters p on p.object_id = sp.object_id
left join sys.types typ on typ.user_type_id = p.user_type_id
order by schema_name, sp.name, p.parameter_id

存储过程结果:

if serverproperty('islocaldb') is not null -- identifies sql server 2012+, which is the first version that supports dm_exec_describe_first_result_set_for_object
or serverproperty('edition') = 'SQL Azure' -- azure sql also supports dm_exec_describe_first_result_set_for_object
    select
        schema_name(sp.schema_id) as schema_name,
        sp.name as procedure_name,
        rs.name as column_name,
        typ.name as type_name,
        rs.max_length,
        rs.precision,
        rs.scale
    from sys.procedures sp
    cross apply sys.dm_exec_describe_first_result_set_for_object(sp.object_id, 0) rs
    join sys.types typ on typ.system_type_id = rs.system_type_id
    order by schema_name, sp.name, rs.column_ordinal
else
    select
        null as schema_name,
        null as procedure_name,
        null as column_name,
        null as type_name,
        null as max_length,
        null as precision,
        null as scale

最新更新