日期:2014-05-18  浏览次数:20446 次

想把后台业务功能做成一个个模块式函数,但这样做是不是对降低反应速度及效率啊?
想建立这么个函数
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的函数执行效率低,少用为好,多用存储过程最好