0

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

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(即 a varchar(64))的值作为fGetAuditDescrConcat函数的参数。

这可能吗?

4

2 回答 2

0

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

尝试修改如下:

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
于 2015-11-24T09:14:14.660 回答
0

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

    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
于 2015-11-24T03:55:04.440 回答