在 T-SQL 脚本中获取 @Parameters 及其数据类型的列表

问题描述 投票:0回答:2

来自这样的 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)

我可以使用任何存储过程或脚本来执行此操作吗?

澄清:

  • SQL 是脚本,而不是存储过程。
  • 我想解析参数并找出它们的数据类型,以便我可以安装 GUI 屏幕,在其中我可以询问最终用户他们想要应用于脚本的值。
  • 目前,我正在通过这种方式传递 TSQL 文本并解析参数。我只是不想重新发明轮子。
sql-server tsql
2个回答
1
投票

您可以使用

sp_describe_undeclared_parameters
系统程序。

DECLARE @query nvarchar(max) = 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
';

EXEC sp_describe_undeclared_parameters @query;

但在很多情况下它可能会失败,尤其是当一个参数被使用两次时。


-1
投票

DECLARE @TSQLScript NVARCHAR(MAX) = '这里是您的 T-SQL 脚本' DECLARE @ParameterList NVARCHAR(MAX) = '@CodigoDeProveedor INT' -- 示例参数列表

-- 解析参数列表,获取参数名称和数据类型 声明@参数表( 参数名称 NVARCHAR(255), 数据类型 NVARCHAR(50) )

声明@ParameterXML XML SET @ParameterXML = CAST('

' + REPLACE(@ParameterList, ',', '

') + '

' AS XML)

插入@Parameters(参数名称,数据类型) 选择 param.value('.', 'NVARCHAR(255)') AS 参数名称, 'UNKNOWN' AS DataType -- 将数据类型初始化为 UNKNOWN,您将需要查询架构 FROM @ParameterXML.nodes('//p') AS 参数(param)

-- 查询数据库模式以获取实际数据类型 更新@参数 设置数据类型 = ( 选择前 1 个数据类型 来自 information_schema.columns WHERE table_name = 'YourTableName' -- 替换为实际表名 AND 列名称 = 参数名称 )

-- 打印参数名称及其数据类型 从@Parameters中选择*

请注意,此脚本经过简化,可能无法涵盖所有场景,特别是如果您的 T-SQL 脚本很复杂并且涉及动态 SQL 或其他高级功能。您需要根据您的具体要求和数据库架构来调整和增强它。

© www.soinside.com 2019 - 2024. All rights reserved.