读书人

想把后台业务功能做成一个个模块式函数

发布时间: 2012-03-13 11:21:11 作者: rapoo

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

读书人网 >SQL Server

热点推荐