简书链接: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
|