定义

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

创建过程

  1. 打开SQL Server
  2. 打开数据库
  3. 点击“可编程性”
  4. 新建“存储过程”

机房重构的存储过程代码

USE [YZY.Charge]
GO
/****** Object:  StoredProcedure [dbo].[PROC_GroupCheck]    Script Date: 18/9/23 17:49:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      杨子颍
-- Create date: 2018-09-18
-- Description: 组合查询进行数据交互
-- =============================================
ALTER PROCEDURE [dbo].[PROC_GroupCheck]-- Add the parameters for the stored procedure here/**** 需要传递的参数 ****/@cmbFiled1 varchar(20),@cmbFiled2 varchar(20),@cmbFiled3 varchar(20),@cmbMark1 varchar(20),@cmbMark2 varchar(20),@cmbMark3 varchar(20),@cmbContext1 varchar(20),@cmbContext2 varchar(20),@cmbContext3 varchar(20),@cmbRelationships1 varchar(20),@cmbRelationships2 varchar(20),@tableName varchar(20)
ASdeclare @TempSql varchar(500)  --临时存放sql语句--Char (32) 是空格  插入(39)是单引号
BEGIN--一个条件的查询SET @TempSql='SELECT * FROM'+@tableName+'WHERE'+@cmbFiled1+@cmbMark1+char(39)+@cmbContext1+char(39)if(@cmbRelationships1!='')BEGIN--两个条件的查询SET @TempSql=@TempSql+@cmbRelationships1+char(32)+@cmbFiled2+@cmbMark2+char(39)+@cmbContext2+char(39)if(@cmbRelationships2!='')BEGIN--三个条件的查询SET @TempSql=@TempSql+@cmbRelationships2+char(32)+@cmbFiled3+@cmbMark3+char(39)+@cmbContext3+char(39)END
END
EXECUTE(@TempSql)
END

D层代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using Entity;
using IDAL;namespace DAL
{public class StuInfoDAL:IStuInfoIDAL{public DataTable SelectStudent(CombinedQuery student){SQLHelper sqlhelper = new SQLHelper();SqlParameter[] sqlParameter = {new SqlParameter("@cmbFiled1",student.CmbFiled1),new SqlParameter("@cmbFiled2",student.CmbFiled2),new SqlParameter("@cmbFiled3",student.CmbFiled3),new SqlParameter("@cmbMark1",student.CmbMark1),new SqlParameter("@cmbMark2",student.CmbMark2),new SqlParameter("@cmbMark3",student.CmbMark3),new SqlParameter("@cmbContext1",student.CmbContext1),new SqlParameter("@cmbContext2",student.CmbContext2),new SqlParameter("@cmbContext3",student.CmbContext3),new SqlParameter("@cmbRelationships1",student.CmbRelationships1),new SqlParameter("@cmbRelationships2",student.CmbRelationships2),new SqlParameter("@cmbtableName",student.CmbtableName)};string sql = @"PROC_CombinedQuery";DataTable dt = sqlhelper.ExecuteQuery(sql, sqlParameter, CommandType.StoredProcedure);return dt;}}
}

优点

  • 重复使用。
    存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
  • 减少网络流量。
    存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
  • 安全性。
    参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

简单讲:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权

【机房重构】组合查询--存储过程相关推荐

  1. 佩特来项目经验小集合(2)___组合查询存储过程,报错 quot;varchar JBID=#39;#39; 转换成数据类型 int 时失败quot;...

       今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' ...

  2. 机房收费--组合查询

    在学生基本信息维护这一窗体里,有一个组合查询,通过组合查询我们可以随意选择不同的条件,进而查询到自己想要查询的内容. 从上图我们不难看出,查询的条件是比较复杂一些,而且一个条件的设定就必须包含三个控件 ...

  3. 二见钟情之组合查询(vb.net版)

    第一遍做机房系统组合查询的时候用的是VB6.0,当时就一个感觉:乱.当时做的时候稀里糊涂的,好不容易应付了事,松了口气.这次是第二遍,用VB.NET还没开始做呢,心里就开始打鼓了,不过做完了以后,发现 ...

  4. 蠡测机房重构之组合查询

    [写在前边的话] 在进行机房重构的过程中,设计组合查询的窗体,真的是学到了很多东西.以管窥豹,以蠡测海,所以想小小的总结一下,缅怀这一寸寸学习的时光. [设计模式之模板方法的运用] 模板方法模式--在 ...

  5. 组合查询(机房重构知识点总结)

    历经n多天.组合查询模板最终做完了,总结一下这几天的成果.和大家一起学习交流. 先看一下父窗口的关键代码: 父窗口代码: Public Class frmComboQueryProtected Ove ...

  6. .NET重构(四):窗体继承+模板方法,完美实现组合查询

    导读:在机房重构中,有好些个查询都是大同小异,最为显著的就是组合查询了.怎样给自己省事儿,相同的东西能不能重复利用,就成了一个现实的问题.第一遍做机房的时候,使用的更多的是:复制+粘贴.学习了设计模式 ...

  7. 机房系统(九)——【组合查询】

    机房收费系统首次让小编接触到了"组合查询".到现在为止,"组合查询"的类型,大概接触到了两种方式,一是单一表多个字段连接的查询:二是多个表的连接查询.机房收费系 ...

  8. mysql存储过程判断多个条件语句_存储过程里多条件判断(SQL组合查询)

    我存储过程里想实现多个传入参数的判断,里面有7个传入参数条件. CREATE PROCEDURE sp_tbWasteSource_Search ( @sd   datetime,           ...

  9. vb.net机房收费系统之组合查询

    我个人一直认为,组合查询是机房收费系统的一个难点,尤其是用到三层之后,如果要为组合查询中的每一个查询建立一个显然是太麻烦了. 下面介绍一下我的方法,对大家起个参考作用. 我将该表中可输入的内容定义为一 ...

最新文章

  1. codevs1002 搭桥
  2. Boost:双图bimap与散列索引的测试程序
  3. Js文件中调用其它Js函数的方法(转)
  4. sqlsever无法重新启动计算机,有关SqlServer 2008安装及卸载的一些问题,安装检测时显示重新启动计算机....
  5. 《MySQL tips:查询时,尽量不要对字段进行操作》
  6. 计算机显卡驱动不匹配,显卡驱动与系统不兼容?尤其是老电脑
  7. SIPP对接fs压力测试
  8. 黑苹果HIDPI开启问题
  9. “两地三中心”和“双活”简介--容灾技术方案
  10. 搭建个人gitlab服务器
  11. 一文搞定权限管理!授权、鉴权超详细解析
  12. 小飞升值记——(9)
  13. 云操作系统OpenStack 优势与问题并存
  14. word表格内文字行间距调整方法
  15. android自定义大转盘,Android 自定义View 抽奖大转盘(1)
  16. 国内用户访问国内服务器,国外用户访问国外服务器
  17. 理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)
  18. 读书笔记:《流畅的Python》第19章 动态属性和特性
  19. Linux报错-ssh_exchange_identi...
  20. 【原创纯手打】如何用VUE在拖拽小框中同步更换壁纸(附代码)

热门文章

  1. HTML5+学习笔记2-------边看代码边研究貌似还是有点问题...还在研究中api中
  2. NetBeans+xdebug解决无法连接xdebug问题
  3. 【重识 HTML + CSS】背景相关知识点
  4. Cannot find class [xxx] for bean with name ‘‘ defined in class
  5. 小程序进阶学习01--功能思维导图梳理
  6. 软件设计师22-存储器系统01
  7. dao-service-servlet-jsp构建简易web通讯录(三层开发)软件安装
  8. [转]从根上理解高性能、高并发:深入计算机底层,理解线程与线程池
  9. Ubuntu 14.04安装和卸载搜狗拼音输入法
  10. java string转sql date_Java中的util.Date,sql.Date,sql.Time,String类型转换