【问题标题】:SQL Server : I need to pass a row value as a parameter to table function in a stored procedureSQL Server:我需要将行值作为参数传递给存储过程中的表函数
【发布时间】:2016-02-26 09:20:38
【问题描述】:

我想创建一个以表值函数为列的存储过程。 我想使用其他列值之一作为函数的参数。

ALTER PROCEDURE [dbo].[AuditReportLeaseID]
    @leaseID int
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        a.assetID as Asset, a.Location, 
        CONVERT(VARCHAR, a.auditdate, 101) AS Date, 
        a.qtyaudit AS Qty, 
        c.classname AS Class, a.grade AS Grade, 
        a.serialnumber AS [S/N], 
        a.materialdescription AS Description, a.Notes, 
        (SELECT tf.AD 
         FROM fGetAuditDescrConcat(a.assetId) tf) AS AuditDescription   
    FROM
        audit a
    LEFT OUTER JOIN
        ORDER_DETAILS od ON a.assetID = od.assetId
    INNER JOIN
        class c ON a.classid = c.classid 
    WHERE
        a.classID = c.classID 
        AND a.leaseID = @leaseID
    ORDER BY
        class, grade, a.materialDescription
END

此过程将返回多行,我想使用第一列 a.assetID(即 varchar(64))的值作为 fGetAuditDescrConcat 函数的参数。

这可能吗?

【问题讨论】:

  • 你试试会发生什么???
  • 对不起 - 它不允许我编译 proc。它对 (a.assetid) 不满意。 '.' 附近的语法不正确。

标签: sql-server database stored-procedures parameter-passing table-functions


【解决方案1】:

你的问题不清楚,但我认为你可能正在寻找这样的东西:

    ALTER PROCEDURE [dbo].[AuditReportLeaseID]
     @leaseID int
    AS
    BEGIN
        SET NOCOUNT ON;
   SELECT * FROM
    (Select a.assetID
      from audit a
      left outer join ORDER_DETAILS od on a.assetID=od.assetId
      inner join class c on a.classid=c.classid where a.classID = c.classID and a.leaseID = @leaseID
      Order by class,grade,a.materialDescription
    ) a
    CROSS APPLY fGetAuditDescrConcat(a.assetID)

    END

【讨论】:

  • 谢谢-我尝试了上述方法,但对函数的参数仍然不满意。我在编译“.' 附近的语法无效”时遇到错误。对不起,我应该在我的原始帖子中说明这一点。主要问题是参数。
【解决方案2】:

如果您的给定查询返回错误,例如子查询返回多行;

尝试如下修改:

ALTER PROCEDURE [dbo].[AuditReportLeaseID]
    @leaseID int
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        a.assetID as Asset, a.Location, 
        CONVERT(VARCHAR, a.auditdate, 101) AS Date, 
        a.qtyaudit AS Qty, 
        c.classname AS Class, a.grade AS Grade, 
        a.serialnumber AS [S/N], 
        a.materialdescription AS Description, a.Notes, 
        (SELECT TOP 1 tf.AD 
         FROM fGetAuditDescrConcat(a.assetId) tf) AS AuditDescription   
    FROM
        audit a
    LEFT OUTER JOIN
        ORDER_DETAILS od ON a.assetID = od.assetId
    INNER JOIN
        class c ON a.classid = c.classid 
    WHERE
        a.classID = c.classID 
        AND a.leaseID = @leaseID
    ORDER BY
        class, grade, a.materialDescription
END

【讨论】:

  • 谢谢-我尝试了上述方法,但对函数的参数仍然不满意。我在编译“.' 附近的语法无效”时遇到错误。对不起,我应该在我的原始帖子中说明这一点。主要问题是参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2015-12-20
  • 2013-07-06
相关资源
最近更新 更多