如何从T-SQL脚本提取参数并获取对应数据库数据类型?
从T-SQL脚本中提取参数并推断数据类型的方案
示例T-SQL脚本
Select Proveedor.RazonSocial, Articulo.ArticuloId As Código, Articulo.Descripcion As Descripción From Articulo Inner Join Suministrador On (Articulo.OID = Suministrador.Articulo) Inner Join Proveedor On (Suministrador.Proveedor = Proveedor.OID) Where Proveedor.ProveedorId = @CodigoDeProveedor
需求说明
希望获取脚本中参数(如@CodigoDeProveedor)及其从数据库表中推断出的数据类型(本例中为int)的列表,用于搭建GUI界面让终端用户输入参数值。当前已自行实现参数解析,但希望使用现成方案避免重复造轮子。
现成解决方案:使用系统存储过程sp_describe_undeclared_parameters
SQL Server提供了系统存储过程sp_describe_undeclared_parameters,可以直接解析T-SQL脚本中的未声明参数,并根据参数的使用上下文自动推断其数据类型。
使用示例
执行以下SQL语句,传入目标脚本:
EXEC sp_describe_undeclared_parameters @tsql = N' Select Proveedor.RazonSocial, Articulo.ArticuloId As Código, Articulo.Descripcion As Descripción From Articulo Inner Join Suministrador On (Articulo.OID = Suministrador.Articulo) Inner Join Proveedor On (Suministrador.Proveedor = Proveedor.OID) Where Proveedor.ProveedorId = @CodigoDeProveedor '
返回结果说明
该存储过程会返回一个结果集,关键列包括:
parameter_name:脚本中的参数名(如@CodigoDeProveedor)system_type_name:推断出的数据类型(如int)max_length:数据类型的最大长度precision和scale:数值类型的精度和小数位数
注意事项
- 执行该存储过程的用户需要具备脚本中涉及表/视图的访问权限,否则无法准确推断数据类型
- 对于包含多个参数的脚本,该存储过程会一次性返回所有参数的信息
- 若参数在脚本中用于多个类型冲突的上下文,推断结果可能需要手动验证,但绝大多数常规场景下结果准确
内容的提问来源于stack exchange,提问作者MartinHT
相关产品推荐
相关产品推荐

