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

定义

存储过程(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)
AS
    declare @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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨幂等

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值