2017-09-04 43 views
0

我未能谷歌这种情况下:我想插入新的行到(时隙)表,一些记录(由WHERE子句选择),并添加3列作为用户定义功能(计算空闲时隙日期,开始和结束时间)。即使UDF返回多于一行,也必须运行。SQL Server:结合SELECT和相关的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结果集加入主选择中有一个关键。

这是行,还是有更好的解决方案?它将与数百到数千个条目一起工作,我不确定这个概念是否可以很好地发挥作用。

回答

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