SQL将表列传递给函数参数

时间:2014-10-06 18:04:48

标签: sql-server-2008 function parameters

我希望使用列表(dbo.Split)调用我的函数(U.UbicacionF),但它不起作用!请你帮我!!感谢

SELECT 
    EE.IDEstatus, EE.IDAsignacion,EE.IDUNIDAD, 
    EE.IDEQUIPO,EE.ESTATUS,EE.bUltEstatus, 
    A.IDDestino, U.UbicacionF, TI.Tiempo 
FROM 
    mar_EstatusEquipo EE 
LEFT JOIN 
    mar_Asignaciones A ON EE.IDAsignacion = A.IDAsignacion 
                       AND EE.IDUNIDAD = A.IDUNIDAD
LEFT JOIN 
    mar_TmpUbicaciones U ON EE.IDUNIDAD = U.IdUnidad AND U.IdUnidad = A.IDUNIDAD
LEFT JOIN 
    mar_TiemposArriboPto TI ON A.IDDestino = TI.Destino 
                            AND TI.Ubicacion LIKE '%' + (SELECT * 
                                                         FROM dbo.Split(U.UbicacionF, ',', '1')) + '%' 
WHERE 
    EE.IDEquipo = CAST(EE.IDUNIDAD AS CHAR)
    AND EE.Estatus IN ('IT','ET')
    AND A.IDDestino = 'MZO'
    AND EE.bUltEstatus = 1
    AND EE.IDUNIDAD = 255
ORDER BY
    EE.IDUNIDAD

1 个答案:

答案 0 :(得分:0)

您可以使用APPLY运算符将列传递给表值函数。在你的情况下,它宁愿应用于CROSS APPLY,以匹配你当前的外连接逻辑:

SELECT
    EE.IDEstatus, EE.IDAsignacion,EE.IDUNIDAD, 
    EE.IDEQUIPO,EE.ESTATUS,EE.bUltEstatus, 
    A.IDDestino, U.UbicacionF, TI.Tiempo 
FROM 
    dbo.mar_EstatusEquipo EE 
LEFT JOIN 
    dbo.mar_Asignaciones A ON EE.IDAsignacion = A.IDAsignacion 
                       AND EE.IDUNIDAD = A.IDUNIDAD
LEFT JOIN 
    dbo.mar_TmpUbicaciones U ON EE.IDUNIDAD = U.IdUnidad AND U.IdUnidad = A.IDUNIDAD
OUTER APPLY (
    SELECT t.Tiempo
    FROM
        dbo.mar_TiemposArriboPto AS t
    INNER JOIN
        dbo.Split(U.UbicacionF, ',', '1') AS s ON t.Ubicacion LIKE '%' + s.Value + '%'
) AS TI
WHERE 
    EE.IDEquipo = CAST(EE.IDUNIDAD AS CHAR)
    AND EE.Estatus IN ('IT','ET')
    AND A.IDDestino = 'MZO'
    AND EE.bUltEstatus = 1
    AND EE.IDUNIDAD = 255
ORDER BY
    EE.IDUNIDAD
;