简书链接:sqlserver表值函数的缺陷
文章字数:102,阅读全文大约需要1分钟
加 if else 逻辑时 必须固定需要返回的列名,而且不能根据不同逻辑得到不同的列名
列名将会根据TABLE (定义的来,后面的select 列名可以不一致, 但是最终还是会返回的是table的列名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ALTER FUNCTION [dbo].[Fun_TimePeriodAverageEfficiency] ( @workshop NVARCHAR(50),
@type NVARCHAR(50))
RETURNS @RESULT TABLE (x VARCHAR(200)) AS
BEGIN

if @type =''
begin
insert into @RESULT
select a from a
end
else
begin
insert into @result
select a from a
end
return

END


无逻辑时

1
2
3
4
5
6
ALTER FUNCTION [dbo].[Fun_TimePeriodAverageEfficiency] ( @workshop NVARCHAR(50),
@type NVARCHAR(50))
RETURNS TABLE
AS
RETURN (查询语句)

故改成存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
GO
CREATE PROC [dbo].[Proc_TimePeriodAverageEfficiency] ( @workshop NVARCHAR(50),
@type NVARCHAR(50))
AS
BEGIN

if @type =''
begin

select * FROM A
end
else
begin

select * from B
end
return

END