【发布时间】:2020-12-01 13:39:15
【问题描述】:
在存储过程中有一个名为 @detaiResultTable 的表变量,这是存储过程的一部分,以及我如何将数据插入到该表变量中。
INSERT INTO @detaiTable
SELECT b.branchid,
sp.fkserviceid,
Count(sp.fkserviceid) AS ServiceCount
FROM location l
INNER JOIN @Branches br
ON l.fkbranchid = br.branchid
WHERE l.addedlocaltime >= @startDate
AND sp.servicetime IS NOT NULL
GROUP BY b.branchid,
sp.fkserviceid
我需要检查另一个名为 @fkTypeID 的标志,它的值可以是 1、2 或 0
- 当
@fkTypeID = 1需要检索fkTypeID = 1数据时 - 当
@fkTypeID = 2需要检索fkTypeID = 2数据时 - 当
@fkTypeID = 0需要检索fkTypeID = 1 and 2数据时
新引入的flag如下,
INSERT INTO @detaiTable
SELECT b.branchid,
sp.fkserviceid,
Count(sp.fkserviceid) AS ServiceCount
FROM location l
INNER JOIN @Branches br
ON l.fkbranchid = br.branchid
WHERE l.addedlocaltime >= @startDate and fkTypeID = @fkTypeID
and sp.ServiceTime is not null
GROUP BY b.branchid,
sp.fkserviceid
最短的方法是什么,我打算这样做。
IF @fkTypeID = 0
BEGIN
INSERT INTO @detaiTable
SELECT b.branchid,
sp.fkserviceid,
Count(sp.fkserviceid) AS ServiceCount
FROM location l
INNER JOIN @Branches br
ON l.fkbranchid = br.branchid
WHERE l.addedlocaltime >= @startDate
AND sp.servicetime IS NOT NULL
GROUP BY b.branchid,
sp.fkserviceid
END
ELSE
BEGIN
INSERT INTO @detaiTable
SELECT b.branchid,
sp.fkserviceid,
Count(sp.fkserviceid) AS ServiceCount
FROM location l
INNER JOIN @Branches br
ON l.fkbranchid = br.branchid
WHERE l.addedlocaltime >= @startDate
AND fktypeid = @fkTypeID
AND sp.servicetime IS NOT NULL
GROUP BY b.branchid,
sp.fkserviceid
END
但问题是,在我的 SP 中有多个这样的表变量。所以如果我写这个代码。它将在我的 SP 中生成大量代码。请帮帮我。
【问题讨论】:
标签: sql sql-server stored-procedures where-clause