2017-09-04 44 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 
      ........;