SQL Server:结合 SELECT 和相关的 UDF 结果
Posted
技术标签:
【中文标题】SQL Server:结合 SELECT 和相关的 UDF 结果【英文标题】:SQL Server : combine SELECT and related UDF results 【发布时间】: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 结果集加入到主选择中。
这样可以吗,还是有更好的解决方案?它适用于成百上千的条目,我不确定这个概念是否能很好地发挥作用。
【问题讨论】:
【参考方案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
........;
【讨论】:
以上是关于SQL Server:结合 SELECT 和相关的 UDF 结果的主要内容,如果未能解决你的问题,请参考以下文章
结合 SQL Server 的“LIKE”和“IN”[重复]
将 SQL Server 图形数据库中的 MATCH 子句和 INNER JOIN 与混合模型相结合
sql server Service Broker 相关查询