想把后台业务功能做成一个个模块式函数,但这样做是不是对降低反应速度及效率啊?
想建立这么个函数
Create Function Sys_DF_HideData(
@FieldName Varchar(200),
@FieldValue Varchar(200)
)
Returns Integer
as
begin
/*
根据系统参数,来判断是否隐藏数据
例: dbo.FSys_EqualityMatch(YHMC,'用户名称')=1
*/
Declare @HideData Varchar(40)
Select @HideData=Value From WSys_DF_SystemParameter Where ParamCode='Sys_HideData'
Return
Case
When IsNull(@HideData,'')='N' Then 1
When IsNull(@HideData,'')<>'N' and @FieldName=IsNUll(@FieldValue,'1') Then 1
Else 0
End
End
调用时:
Select * from Conc_Sign Where dbo.Sys_DF_HideData(DataType,1)=1
如果这个Conc_Sign表中有一百万条时, Sys_DF_HideData函数中
Select @HideData=Value From WSys_DF_SystemParameter Where ParamCode='Sys_HideData'
这条语句是不是查询了一百万次啊
还是只能写成:
Select @HideData=Value From WSys_DF_SystemParameter Where ParamCode='Sys_HideData'
Select * from Conc_Sign Where (Case When IsNull(@HideData,'')<>'N' and DataType=1 Then 1 Else 1 End)=1
或
Select @HideData=Value From WSys_DF_SystemParameter Where ParamCode='Sys_HideData'
Select * from Conc_RKZB Where (Case When IsNull(@HideData,'')<>'N' and DataType=1 Then 1 Else 1 End)=1
所以想问问大家,对于不同查询语句中,有同样功能需求的条件过滤处理功能, 能不能写成一个公共函数.
这样写会不会大大降低访问速度, 大大增加数据访问读取次数.
[解决办法]
sqlserver的函数执行效率低,少用为好,多用存储过程最好