我有这个函数,我想返回表@List。 我该怎么做?任何人都可以帮助我。 谢谢在SQL Server中使用标量值函数返回表
ALTER FUNCTION [dbo].[GetTotalFaltasPorMes]
(
-- PARÂMETROS
@UIFuncionario as char(36),
@Data as DateTime
)
RETURNS TABLE
AS
BEGIN
-- VARIÁVEIS
DECLARE @TotalFaltas as float
DECLARE @List TABLE(Jan VARCHAR(100), Fev VARCHAR(100), Mar VARCHAR(100), Abr VARCHAR(100),
Mai VARCHAR(100), Jun VARCHAR(100), Jul VARCHAR(100), Ago VARCHAR(100),
Stb VARCHAR(100), Otb VARCHAR(100), Nov VARCHAR(100), Dez VARCHAR(100)
);
-- QUERY SQL
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='1'
AND TpSegmento IN (6,7)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='2'
AND TpSegmento IN (6,7)
INSERT INTO @List (Fev) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='3'
AND TpSegmento IN (6,7)
INSERT INTO @List (Mar) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='4'
AND TpSegmento IN (6,7)
INSERT INTO @List (Abr) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='5'
AND TpSegmento IN (6,7)
INSERT INTO @List (Mai) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='6'
AND TpSegmento IN (6,7)
INSERT INTO @List (Jun) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='7'
AND TpSegmento IN (6,7)
INSERT INTO @List (Jul) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='8'
AND TpSegmento IN (6,7)
INSERT INTO @List (Ago) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='9'
AND TpSegmento IN (6,7)
INSERT INTO @List (Stb) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='10'
AND TpSegmento IN (6,7)
INSERT INTO @List (Otb) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='11'
AND TpSegmento IN (6,7)
INSERT INTO @List (Nov) VALUES (@TotalFaltas)
SET @TotalFaltas=0
SELECT @TotalFaltas=SUM(Duracao) FROM CthAcmDiaLG
WHERE [email protected]
AND MONTH(@Data)='12'
AND TpSegmento IN (6,7)
INSERT INTO @List (Dez) VALUES (@TotalFaltas)
-- RETORNO
RETURN @List
END
你的问题是什么(错误)? – RezaRahmati 2014-09-30 13:46:56
只是你知道的。你的代码很糟糕。无论您将哪个值作为参数@Data传递,您都会得到相同的结果。而且你还错过了第一个月的插入。您不应该返回表格,因为您返回的唯一信息是1值。 – 2014-09-30 14:06:45
具有多个查询的表值函数称为多语句表值函数,并且性能确实很糟糕。只是将一堆查询放在一起,并将结果粘贴到临时表中并返回,这是超级麻烦代码的一个秘诀。你可以通过它的外观将整个事件重写成单个select语句,而不是像这样的选择语句。 – 2014-09-30 14:42:03