【机房收费系统】——存储过程

最近敲的组合查询,用到了存储过程,遇到了很多问题,现在写出来与大家分享。


存储过程建立


存储过程的建立很简单,在数据库中的可编译性下的存储过程中直接新建就可以了。
或者新建查询,输入存储过程对应的SQL语句就行:
Create proc [dbo].[procTemp]  
@cboFieldA varchar(10),  
@cboOperatorA varchar(10),  
@txtConditionA varchar(10),  
@cboRelationA varchar(10),  
@cboFieldB varchar(10),  
@cboOperatorB varchar(10),  
@txtConditionB varchar(10),  
@cboRelationB varchar(10),  
@cboFieldC varchar(10),  
@cboOperatorC varchar(10),  
@txtConditionC varchar(10),
@tableName varchar(10)

AS  

declare @TempSql varchar(500)

BEGIN  

set @TempSql='select * from ' +@tableName +' where'+CHAR(32)+@cboFieldA+@cboOperatorA+CHAR(39)+@txtConditionA+CHAR(39) 

	if (@cboRelationA !='' ) 
	begin
		set @TempSql=@TempSql+@cboRelationA+CHAR(32)+@cboFieldB+@cboOperatorB+CHAR(39)+@txtConditionB+CHAR(39)
		
		if (@cboRelationB !='') 
		begin
			set @TempSql=@TempSql+@cboRelationB+CHAR(32)+@cboFieldC+@cboOperatorC+CHAR(39)+@txtConditionC+CHAR(39)  
		end
	end
 execute (@TempSql) 
  
END

遇到的问题


存储过程建立很简单,但是存储过程调试却有点麻烦,我出过以下两个问题:

问题一:查询时,只识别第一个条件,第二个和第三个条件不识别。

当时我的存储过程是这样的:

if (@cboRelationA !=null ) 
	begin
		set @TempSql=@TempSql+@cboRelationA+CHAR(32)+@cboFieldB+@cboOperatorB+CHAR(39)+@txtConditionB+CHAR(39)
		
		if (@cboRelationB !=null) 
		begin
			set @TempSql=@TempSql+@cboRelationB+CHAR(32)+@cboFieldC+@cboOperatorC+CHAR(39)+@txtConditionC+CHAR(39)  
		end

问题二:总是报错。

错误显示:


我的存储过程是这样的:

if (@cboRelationA is not null ) 
	begin
		set @TempSql=@TempSql+@cboRelationA+CHAR(32)+@cboFieldB+@cboOperatorB+CHAR(39)+@txtConditionB+CHAR(39)
		
		if (@cboRelationB is not null) 
		begin
			set @TempSql=@TempSql+@cboRelationB+CHAR(32)+@cboFieldC+@cboOperatorC+CHAR(39)+@txtConditionC+CHAR(39)  
		end
	end

分析:和最终的存储过程相比,就是判断的条件不同,但是出来的效果很不一样。问题的原因都归结于这

个“Null”值。


关于Null的分析


度娘的解释Null,读音[nʌl]。本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是

空集合。  

在数据库中的NULL:Null在数据库中表示不知道的数据,主要有3种意思:

1)知道数据存在,但不知道具体值.

2)不知道数据是否存在

3)数据不存在.


总结


所以基于对Null值的分析,再回头解释为什么会出现上述的两个问题。

第一个问题分析:

在第一种情况下,之所以会出现第二三个条件都不能执行的情况,很明显是没有执行判断下的SQL语句。所以在

数据中判断是否为空,不能用Null。

第二个问题分析:

而第二种情况,起判断作用的SQL语句执行了,但是因为第二个或者第三个没有输入值,导致出错。即使

cmboRelationA(cmboRealtionB)为空,但是SQL语句照常执行,说明对于cmboRelation的限制没有起到作用。

存储过程是很方便,但是它的使用也是很不方便的。经过这两天的代码调试,有种历经沧桑的感觉,真的是在调

试中成长的赶脚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值