【问题标题】:SQL Server : combine SELECT and related UDF resultsSQL Server:结合 SELECT 和相关的 UDF 结果
【发布时间】:2017-09-04 08:54:42
【问题描述】:

我没有在谷歌上搜索这个场景:我想在(时隙)表中插入一些记录(由 WHERE 子句选择)并添加 3 列作为 User-Defined-Function 的结果(计算一个空档日期、开始和结束时间)。即使 UDF 返回不止一行,这也必须有效。

基于微软关于使用 UDF 的建议:

SELECT ContactID, FirstName, LastName, JobTitle, ContactType
FROM dbo.ufnGetContactInformation(1209);

我想出了这个概念:

INSERT INTO PlanTimeSlots (........................)
    SELECT 
        PRJ.ID as RID,
        GST.SlotDate as SlotDate,
        GST.SlotStart as TimeStart,
        GST.SlotEnd as TimeEnd,
        PRJ.WPGroupID as WPGroupID,
        45 as Priority
    FROM 
        PlanRJ as PRJ
    LEFT JOIN 
        (SELECT 
             SlotDate, SlotStart, SlotEnd
         FROM 
             dbo.GetSuitableTimeSlot(PRJ.ID, PRJ.WPGroupID, 
                                     PRJ.DateReqBy, PRJ.DurationMin)) AS GST ON GST.JID = PRJ.ID
    WHERE 
        ........;

所以我冗余地将一个 RID 传递给 UDF,它作为 GST.JID 返回,所以有一个键可以将 UDF 结果集加入到主选择中。

这样可以吗,还是有更好的解决方案?它适用于成百上千的条目,我不确定这个概念是否能很好地发挥作用。

【问题讨论】:

    标签: sql sql-server stored-procedures user-defined-functions


    【解决方案1】:
    1. query result will depend upon your where condition also. 
    
    2. If you want to get all the records from left query then use left join otherwise change it to INNER join 
    3. Treat your user defined function as other table no need for select statement.
    
        INSERT INTO PlanTimeSlots (........................)
            SELECT 
                PRJ.ID as RID,
                GST.SlotDate as SlotDate,
                GST.SlotStart as TimeStart,
                GST.SlotEnd as TimeEnd,
                PRJ.WPGroupID as WPGroupID,
                45 as Priority
            FROM 
                PlanRJ as PRJ
            INNER JOIN 
                dbo.GetSuitableTimeSlot(PRJ.ID, PRJ.WPGroupID, 
                                             PRJ.DateReqBy, PRJ.DurationMin) AS GST ON GST.JID = PRJ.ID
            WHERE 
                ........;
    

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多