SQL Server:组合SELECT和相关的UDF结果

时间:2017-09-04 08:54:42

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

我没有谷歌这种情况:我想在(时隙)表中插入新行,对于某些记录(由WHERE子句选择),并添加3列作为用户定义函数的结果(计算一个免费老虎机日期,开始和结束时间)。这必须起作用,即使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结果集连接到主选择。

这样可以,还是有更好的解决方案?它可以使用数百到数千个条目,我不确定这个概念是否表现良好。

1 个答案:

答案 0 :(得分:0)

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 
            ........;