1. 程式人生 > >【機房重構】組合查詢—儲存過程

【機房重構】組合查詢—儲存過程

        儲存過程(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 ' 
[email protected]
+' where'+char(32)+ @[email protected] +char(39)[email protected] +char(39) if(@cboRelation1 != null) begin --兩個條件查詢 set @TempSql [email protected] +char(32) [email protected] +char(32)[email protected] [email protected] +char(39)[email protected]
+char(39)if(@cboRelation2 != null) begin --三個條件查詢 set @TempSql [email protected] +char(32)[email protected]+char(32)[email protected] [email protected] +char(39)[email protected] +char(39)endendexecute (@Tempsql) --執行查詢語句 end


這次主要遇到這麼幾個錯誤:

1儲存過程中SQL語句的小標點,萬萬大意不得。

    正確寫法:

         @TempSql='select * from ' [email protected]+' where'+char(32)[email protected][email protected]+char(39)[email protected] +char(39)

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

    錯誤寫法:

         @TempSql='select * from'+char(39)[email protected]+char(39)+'where'+char(32)[email protected][email protected] +char(39)[email protected] +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)的引數情況下都可以執行。(在這裡表示判斷引數值是否為空)

相關推薦

機房重構組合查詢--儲存過程

定義 儲存過程(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的一個重要物件。 建立

機房重構組合查詢儲存過程

        儲存過程(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的

機房重構——組合查詢

建立父窗體 構造虛方法 //將漢字轉化為資料庫識別的形式 public virtual string ToEnglish(string ctr) { return ""; } //獲得資料庫名字 public virtual string GetdbName() {

機房重構——儲存過程

  D層 public DataTable GroupQuery(Entity.GroupQuery group) { SqlHelper sqlHelper = new SqlHelper(); //儲存過

機房重構——檢視,觸發器,儲存過程的使用

       在機房收費系統中,對多個表的查詢,要寫多個SQL是很麻煩的事情,為了方便我們寫程式碼,同時對程式碼進行解耦和,我們引用了檢視,觸發器,儲存過程。 一、是什麼? 檢視      從若干

機房重構——檢視上機記錄、充值記錄+三層+儲存過程+模板方法

模板方法 定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 即:重複度高的窗體,可以用模板方法,比如組合查詢。少數

機房重構——儲存過程和觸發器

          引言      在上一篇部落格中給大家介紹了觸發器的作用,那麼我在這篇部落格中給大家介紹一下儲存過程的知識,觸發器和儲存過程非常的相似,所以給大家介紹完儲存過程以後會通過對比這兩塊

機房收費系統——組合查詢

             先來說說我們普遍存在的一種心理,就是我們看到組合查詢的那個介面的時候我們當時就被自己給打死了,我們的第一反應就是這是個什麼東西,這麼多的框框,所以就給組合查詢蒙上了一層 “很難”的面紗,但是當我們仔細想想我們好像在那見過這樣的知識。仔細想想,,,,

重構組合查詢——模板模式

#前言 在進行機房重構的時候,我們學了那麼久的設計模式,不斷理解,抽象具體化,都不如來一個實際的,操作一下! 俗話說:“實踐是檢驗真理的唯一標準!”所以今天我們將模板模式和組合查詢結合到一塊,你會發現組合查詢原來可以這麼簡單! #模板模式 我們要使用模板設計模式

機房重構總結

方法調用 什麽 是個 協調 自己 ont 之間 過程 不能 機房收費個人版算是磕磕絆絆完畢了,這裏話不多說,收獲的東西,遇到的困難。僅僅有自己才幹懂得。總結一下重構過程中的問題。不足及學到的東西。 一.驗收問題 那天緊趕慢趕的完畢及功能實現,就想著急的找

機房重構datagridview樣式分享

public void ToStyle(DataGridView dgv) { System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = ne

機房重構DataGridView中新增複選框

實現效果 DataGridView列頭新增複選框 //宣告靜態類變數 private static DataGridViewCheckBoxColumn checkColumn = null; private void cmbJiBie_SelectedIndexChang

機房重構——觸發器

       在耿建玲視訊中就學習了觸發器這個知識點,但是當時沒有認真的學習者塊知識,只知道觸發器是當我們對資料庫中的表進行操作的時候,自動觸發執行sql語句,但是到底是怎麼使用?以及基本語法是什麼都

機房重構——增刪改查(四)

【查】 1.返回布林值,不需要知道表裡的內容,只判斷是否存在 UI層 Entity.UserInfo entity = new Entity.UserInfo(); entity.UserID = txtUserID.Text; Facade.LoginFacade facade =

機房重構——增刪改查(三)

【改】 UI層 Entity.StuInfo stu = new Entity.StuInfo(); stu.UserID = txtUserID.Text.Trim(); stu.UserName = txtUserName.Text; stu.Sex = cmbSex.Text;

機房重構——增刪改查(一)

【增】 UI層 Entity.UserInfo user = new Entity.UserInfo(); user.UserID = txtUserID.Text.Trim(); Facade.StuFacade facade = new Facade.Stu

機房重構——Excel匯出

首先,我們應該先新增一個引用在UI裡。  這個方法有可能被多次用到,所以把它封裝在一個類裡邊,方便呼叫。 using System.Windows.Forms;//新增引用窗體 using Excel = Microsoft.Office.Interop.Excel; u

機房重構SQL語句已終止

    在下機將消費時間寫入資料庫時,出現了一個沒有遇到過的錯誤,用了將近一下午的時間才改正過來,其實出錯的原因也很簡單。                                      

機房重構——使用者管理

【前言】 如何進行使用者管理,無外乎就是對其進行基本的增刪改查,但是又要在DAL寫好幾個SQL語句,想想也挺頭大的還是果斷使用儲存過程吧,儲存過程的好處又很多,我就不一一例舉了,下面進入正題。   【正文】 儲存過程程式碼 ALTER PROCEDURE

機房重構——下機(策略模式+職責鏈模式)

【前言】 下機功能在整個機房收費系統中也算是一個難點吧,因為下機的過程中涉及到的表比較多,有不同的收費標誌。針對這些要點,我分別採用了職責鏈模式來實現分段計費,策略模式來實現不同使用者的收費標準。下面請看我一一道來。   【內容】 一、什麼是策略模式