[기계실 재구성] 조합 조회 - 저장 과정

5541 단어 재구성
저장 프로세스(Stored Procedure)는 대형 데이터베이스 시스템에서 특정 기능을 완성하기 위한 SQL 문장집을 데이터베이스에 저장하고 첫 번째 컴파일을 거친 후에 다시 호출하여 다시 컴파일할 필요가 없다. 사용자는 저장 프로세스의 이름을 지정하고 파라미터를 제시한다(이 저장 프로세스에 파라미터가 있을 경우).저장 프로세스는 데이터베이스 중의 중요한 대상으로 어떤 디자인이 좋은 데이터베이스 응용 프로그램이든 저장 프로세스를 사용해야 한다.
조합 조회에서 저장 프로세스를 사용했는데 오류가 무더기로 발생했습니다.젊은이들의 도움과 고된 조정 시험을 거쳐 마침내 잘못을 바로잡았다.
디버깅이 끝난 후의 저장 과정은 다음과 같다. (주 프로그램이 호출되기 전에 파라미터의 초기 값을 제거하고 프로그램에서 얻으며 테스트를 편리하게 하기 위해 이렇게 한다)
USE [RoomCharge]
GO
/****** Object:  StoredProcedure [dbo].[PROC_CombinedQuery]    Script Date: 11/13/2015 19:40:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:	  
-- Create date: 2015-11-10
-- Description:	      ,        ,                 
-- =============================================
ALTER PROCEDURE [dbo].[PROC_CombinedQuery] 
	-- Add the parameters for the stored procedure here
	@DbName nvarchar(50)='stuOnlineRecord_Info',
	@cboFileName1 nvarchar(20)='StudentName',
	@cboOperator1 nvarchar(10)='=',
	@txtContent1 nvarchar(20)='1',
	@cboRelation1 nvarchar(10) = '',
	@cboFileName2 nvarchar(20)='CardNo',
	@cboOperator2 nvarchar(10)='=',
	@txtContent2 nvarchar(20)='1',
	@cboRelation2 nvarchar(10)='and',
	@cboFileName3 nvarchar(20)='StudentNo',
	@cboOperator3 nvarchar(10)='=',
	@txtContent3 nvarchar(20)='1'	
AS

declare @TempSql varchar(500)--    sql   
   --CHAR(32)   ,CHAR(39)    

 begin 

       --      
	 set @TempSql ='select * from ' +@DbName+' where'+char(32)+
	@cboFileName1+@cboOperator1 +char(39)+@txtContent1 +char(39)
	  
	if(@cboRelation1 != null) 
	begin
   
 --      

 set @TempSql =@TempSql +char(32) +@cboRelation1 +char(32)+@cboFileName2 +@cboOperator2 +char(39)+@txtContent2 +char(39)if(@cboRelation2 != null) 
begin
          
--      

 set @TempSql =@TempSql +char(32)+@cboRelation2+char(32)+@cboFileName3 +@cboOperator3 +char(39)+@txtContent3 +char(39)endendexecute (@Tempsql) --      
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

 

--     :

@cboRelation1=''--(1)     null

@cboRelation1=null  --(2)     null

@cboRelation1 is not null --(3)      

 

--          

if(@cboRelation1 is not null) -- (1)            , (2)          。(             )

if(@cboRelation1 != null) -- (1)(2)           。(              )

좋은 웹페이지 즐겨찾기