首页 新闻 会员 周边

表值函数一参多值可以吗?

0
悬赏园豆:5 [已解决问题] 解决于 2013-09-02 09:19

这是我创建的函数:create function Fun_NewCarOnLineAllAccount
(
   @ServerName  varchar(100),    
   @TerminalSN  varchar(100),   
   @ServerCardNum varchar(20), 
   @endDate datetime,
   @starDate datetime          
)
returns table
as
return(select Brand,Name,ServiceNo,sum(s) as Second,COUNT(*) as Acount,TerminalSN
from
(select ServiceNo,b.TerminalSN,Name,c.Brand,
(case
when states=0 then DATEDIFF(SECOND,LoginIn,LoginOut) end
) as s from TaxiRdDriverLogin b
inner join TR_Car c on b.TerminalSN=c.TerminalSN and c.Isdelete=0
where(@TerminalSN = '' or b.TerminalSN in (@TerminalSN))
and(@ServerName='' or b.ServiceNo in (@ServerName))
and (@ServerCardNum = '' or b.ServiceNo like '%'+ @ServerCardNum +'%')
and ((LoginIn<@endDate and LoginIn>@starDate) or LoginOut is null)
) a group by ServiceNo,TerminalSN,Name,Brand)

 

 

我用的时候select * from Fun_NewCarOnLineAllAccount('','086,731','','','')这样查不出数据来。

camille繁花的主页 camille繁花 | 初学一级 | 园豆:16
提问于:2013-08-29 09:44
< >
分享
最佳答案
0

你可以修改为动态sql,否则是不会自动拆分为两个数据的~,虽然你的函数的表值,不过参数是标量~

收获园豆:5
幻天芒 | 高人七级 |园豆:37175 | 2013-08-29 10:11

不懂。什么是动态sql?应该怎么写?

camille繁花 | 园豆:16 (初学一级) | 2013-08-29 10:14

@camille繁花: declare @sql varchar(2000) set @sql='select * from t where col in ('+@参数+')'

exec(@sql)

这种算动态sql~

幻天芒 | 园豆:37175 (高人七级) | 2013-08-29 12:12
其他回答(2)
0

你把参数拆开来传 或者你把函数定义一个参数 到里面再分开。

Albert Fei | 园豆:2102 (老鸟四级) | 2013-08-29 10:34

函数已经定义参数了啊。你说的应该怎么分?

支持(0) 反对(0) camille繁花 | 园豆:16 (初学一级) | 2013-08-29 16:32

@camille繁花: 刚开始没有看清楚参数。

问题可能是在and ((LoginIn<@endDate and LoginIn>@starDate) or LoginOut is null)这个地方。

因为你传进来的('','086,731','','','') 这个地方最后二个日期是空的。

在比较时 空日期是比有日期值的要小。 所以这个地方如果没有LoginOut is null的数据存在。就查不到值了。

支持(0) 反对(0) Albert Fei | 园豆:2102 (老鸟四级) | 2013-08-29 18:20
0

问题出在 b.TerminalSN in (@TerminalSN)

dudu | 园豆:30994 (高人七级) | 2013-08-29 10:47

那我应该怎么写呢?我之前用的方法是像and (@ServerCardNum = '' or b.ServiceNo like '%'+ @ServerCardNum +'%')这样的like。页面上用数组一个一个循环的  好麻烦 想改函数不写循环

支持(0) 反对(0) camille繁花 | 园豆:16 (初学一级) | 2013-08-29 10:50

@camille繁花: 

可以使用EXEC('')进行SQL语句的拼接

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2013-08-29 11:00

@dudu: 不是很懂,您能详细一点么...

支持(0) 反对(0) camille繁花 | 园豆:16 (初学一级) | 2013-08-29 16:33

@camille繁花: 

参考园子里的博文:SQL EXEC用法总结

另外,也可以用sp_executesql,参考多参数sp_executesql

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2013-08-29 16:38

@dudu

b.TerminalSN in (@TerminalSN) 这样写法是可以的,应该没有错。

我在MSSQL中是能运行的。

支持(0) 反对(0) Albert Fei | 园豆:2102 (老鸟四级) | 2013-08-29 18:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册