【机房重构】组合查询—存储过程

简介: 【机房重构】组合查询—存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

       在组合查询中用到了存储过程,遇到了一堆错误。经过小伙伴儿们的帮忙,和艰苦的调试,终于调出了错误。

调试完错误后的存储过程是这样的:(在主程序调用前要把参数的初始值去掉,由程序中获得,测试为了方便才如此做)

1. USE [RoomCharge]
2. GO
3. /****** Object:  StoredProcedure [dbo].[PROC_CombinedQuery]    Script Date: 11/13/2015 19:40:04 ******/
4. SET ANSI_NULLS ON
5. GO
6. SET QUOTED_IDENTIFIER ON
7. GO
8. -- =============================================
9. -- Author: 李爽
10. -- Create date: 2015-11-10
11. -- Description: 实现组合查询,学生上机记录查询,教师工作记录查询和学生基本信息维护
12. -- =============================================
13. ALTER PROCEDURE [dbo].[PROC_CombinedQuery] 
14.   -- Add the parameters for the stored procedure here
15.   @DbName nvarchar(50)='stuOnlineRecord_Info',
16.   @cboFileName1 nvarchar(20)='StudentName',
17.   @cboOperator1 nvarchar(10)='=',
18.   @txtContent1 nvarchar(20)='1',
19.   @cboRelation1 nvarchar(10) = '',
20.   @cboFileName2 nvarchar(20)='CardNo',
21.   @cboOperator2 nvarchar(10)='=',
22.   @txtContent2 nvarchar(20)='1',
23.   @cboRelation2 nvarchar(10)='and',
24.   @cboFileName3 nvarchar(20)='StudentNo',
25.   @cboOperator3 nvarchar(10)='=',
26.   @txtContent3 nvarchar(20)='1' 
27. AS
28. 
29. declare @TempSql varchar(500)--临时存放sql语句 
30. --CHAR(32)是空格,CHAR(39)单引号 
31. 
32. begin
33. 
34. --一个条件查询
35.    set @TempSql ='select * from ' +@DbName+' where'+char(32)+
36.   @cboFileName1+@cboOperator1 +char(39)+@txtContent1 +char(39)
37. 
38.   if(@cboRelation1 != null) 
39.   begin
40. 
41. --两个条件查询
42. 
43. set @TempSql =@TempSql +char(32) +@cboRelation1 +char(32)+@cboFileName2 +@cboOperator2 +char(39)+@txtContent2 +char(39)if(@cboRelation2 != null) 
44. begin
45. 
46. --三个条件查询
47. 
48. set @TempSql =@TempSql +char(32)+@cboRelation2+char(32)+@cboFileName3 +@cboOperator3 +char(39)+@txtContent3 +char(39)endendexecute (@Tempsql) --执行查询语句
49. end



这次主要遇到这么几个错误:

1存储过程中SQL语句的小标点,万万大意不得。

   正确写法:

        @TempSql='select * from ' +@DbName+' where'+char(32)+@cboFileName1+@cboOperator1+char(39)+@txtContent1 +char(39)

注意:from右边和where左边均有一个空格,必不可少。

   错误写法:

        @TempSql='select * from'+char(39)+@DbName+char(39)+'where'+char(32)+@cboFileName1+@cboOperator1 +char(39)+@txtContent1 +char(39)

注意:在单引号的句子中的单引号外不可以再用char(32)ascii码。而应该向正确写法一样用单引号里边的空格。当然单引号内部不可以用ascii过程中SQL语句的小标点码。

2、存储过程中空值Null

 

   Isnot Null(is null)  VS  !=null(=null)

   is null:用来确定表达式是否为Null

   =null:用来确认参数是否为Null

 

1. --给参数赋值:
2. 
3. @cboRelation1=''--(1)表示参数是null
4. 
5. @cboRelation1=null  --(2)表示参数是null
6. 
7. @cboRelation1 is not null --(3)会有语法错误
8. 
9. 
10. 
11. --判断参数是否符合条件
12. 
13. if(@cboRelation1 is not null) --在(1)的参数情况下会有语法错误,在(2)的参数情况下可以执行。(这里表示判断表达式是否为空)
14. 
15. if(@cboRelation1 != null) --在(1)(2)的参数情况下都可以执行。(在这里表示判断参数值是否为空)


相关文章
|
存储 SQL 关系型数据库
MySQL连接查询与存储过程
MySQL连接查询与存储过程
93 0
|
存储 SQL 开发框架
可视化查询(sp_helptext)——快速查询包含指定字符串的存储过程(附源码)
可视化查询(sp_helptext)——快速查询包含指定字符串的存储过程(附源码)
|
存储 关系型数据库 MySQL
|
6月前
|
存储 关系型数据库 MySQL
Mysql存储过程查询结果赋值到变量
Mysql存储过程查询结果赋值到变量
162 0
|
6月前
|
存储 关系型数据库 MySQL
mysql 存储过程游标 循环输出select 查询结果
mysql 存储过程游标 循环输出select 查询结果
127 0
|
7月前
|
存储 SQL 缓存
解锁MSSQL存储过程优化之道:参数化查询的技术深度探究
解锁MSSQL存储过程优化之道:参数化查询的技术深度探究
140 0
|
存储 SQL 定位技术
【机房重构】—存储过程当媒人
那是一个风和日丽的白天,重构帅小伙独自一人走在处处飘香的初夏的校园中,他一直在思考,如何与库美女更容易的交往呢?
|
存储 SQL 数据库
【机房重构】——存储过程和触发器
【机房重构】——存储过程和触发器
164 0
【机房重构】——存储过程和触发器
|
SQL 存储 索引
SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法
原文:SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法   本文出处: http://www.cnblogs.com/wy123/p/5958047.html    最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种写法孰优孰劣,该选用那种写法,以及各种写法优缺点,本文以一个简单的查询存储过程为例,简单说一下各种写法的区别,以及该用那种写法专业DBA以及熟悉数据库的同学请无视。
1083 0
|
存储 关系型数据库 MySQL

热门文章

最新文章