• 【存储过程,视图,临时表,事务】的一些理解


    存储过程,视图,临时表,事务等这些之前只是学过,但没有仔细想过是干啥的,什么情况下用。所以这就像别人让你去东边,你就去东边,但去了东边,却不知道去那干啥? 所以为了灵活应用,今天就来汇总下。

    也希望对大家有帮助~

    ---1.临时表

    临时表相信很多人都用过,也有肯能,你用了,但不知道自己用了。那么就介绍下什么是临时表。

    概念:顾名思义,临时表即使存储临时数据的。当数据库关闭,临时表会自动清除。

      使用范围:  1.当有一个子查询被重复使用时,可以做成临时表,提高查询效率。 2.当写存储过程复杂逻辑时,我们也可以用临时表存储一部分数据,然后从临时表查询我们需要的数据

    临时表分为两种:一种是本地临时表,一种是全局临时表

    本地临表弊端即使当查询窗口关闭了,再打开就查询不到了。 而全局临时表,只要数据库没关闭,就可以继续查询。

    ===本地临时表创建方式(一个#号):1).create table #临时表名(ID int,UserName vnarchar(20))

      2).select * into #临时表名 from 你的表 (常用方式)

    ===全局临时表创建方式,我就不重复写了,就是把上面的一个#改为两个#就可以了哈~

    ---2.视图

     视图其实和临时表有类似的地,就是都是一虚拟的表,不存储任何数据。 不同的是,视图可以永久保存起来,然后使用sql语句可以直接对视图进行查询。

    视图和临时表通常都是讨论的查询方面。

      使用范围:1.将一个复杂的查询封装成一个视图,这样再次使用就不用写了,减少Coding   2.只提供显示其中某几列,隐藏其它信息。

    简单演示下:(使用Sql调用视图,和使用正常的sql语句流程是一样的)

    go
    create view Vw_LinShi
    as
    select LName from LeiGe where LId=2
    
    go
    
    select *from Vw_LinShi;

    --3.存储过程

    存储过程,说白了就是Sql Server里面的逻辑语句。它通过预编译,然后调用时比传递Sql语句快很多。这样也可以减少网络带宽。

    1.存储过程可以单独执行一条Sql语句 2.存储过程也可以执行其它Sql语句 3.存储过程在创建的时候就在服务器进行了编译,所以执行起来比单个Sql语句快

    go
    create proc Pro_Handler
    as
    begin
    select *from LeiGe where LAge=17
    end
    go
    execute Pro_Handler   --执行存储过程

    --4.事务

     事务就是保证事情的完整性,在出错时会自动进行回滚到原来状态。

    事务在C#中的使用:

    控制台部分:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using 三层__登录;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace 视图查询复习
    {
        class Program
        {
            private static string strConn = "server=.;database=Inferno1;integrated security=true;";   
            static void Main(string[] args)
            {
    
                 object obj=-1;//接受事务返回的查询结果
                //事务的使用
                using (SqlConnection conn = new SqlConnection(strConn))
                {
                    conn.Open();
                    using (SqlTransaction trans = conn.BeginTransaction())
                    {
                        try
                        {
                            string sql = "insert into LeiGe values(@name,@age);select @@IDENTITY";
                            SqlParameter[] pms = new SqlParameter[]{
                         new SqlParameter("@name",SqlDbType.NVarChar,5),
                         new SqlParameter("@age",SqlDbType.Int)
                         };
                            pms[0].Value = 11111;
                            pms[1].Value = "aaa";
                         obj =SqlHelper.GetSingle(conn, trans, sql, pms);
                           trans.Commit();
                        }
                        catch
                        {
                            trans.Rollback();
                           
                        }
                    }
                }
    
                Console.WriteLine(obj);
                Console.ReadKey();
            }
        }
    }
    View Code

    帮助类部分:

          //Tansnsiction
           /// <summary>
           /// 2012-2-21新增重载,执行一条计算查询结果语句,返回查询结果(object)。
           /// </summary>
           /// <param name="connection">SqlConnection对象</param>
           /// <param name="trans">SqlTransaction事务</param>
           /// <param name="SQLString">计算查询结果语句</param>
           /// <returns>查询结果(object)</returns>
           public static object GetSingle(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
           {
               using (SqlCommand cmd = new SqlCommand())
               {
                   try
                   {
                       PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
                       object obj = cmd.ExecuteScalar();
                       cmd.Parameters.Clear();
                       if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                       {
                           return null;
                       }
                       else
                       {
                           return obj;
                       }
                   }
                   catch (System.Data.SqlClient.SqlException e)
                   {
                       //trans.Rollback();
                       throw e;
                   }
               }
           }
           private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
           {
               if (conn.State != ConnectionState.Open)
                   conn.Open();
               cmd.Connection = conn;
               cmd.CommandText = cmdText;
               if (trans != null)
                   cmd.Transaction = trans;
               cmd.CommandType = CommandType.Text;//cmdType;
               if (cmdParms != null)
               {
    
    
                   foreach (SqlParameter parameter in cmdParms)
                   {
                       if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                           (parameter.Value == null))
                       {
                           parameter.Value = DBNull.Value;
                       }
                       cmd.Parameters.Add(parameter);
                   }
               }
           }
    View Code
  • 相关阅读:
    csp-2020-s游记
    线性DP
    tarjan无向图
    tarjan有向图
    树前置知识普及
    hash
    可持久化线段树&主席树
    [HAOI 2015] 树上染色
    [Contest on 2020.11.24] Beetle
    [Contest on 2020.11.24] Candy
  • 原文地址:https://www.cnblogs.com/shuai7boy/p/6611370.html
Copyright © 2020-2023  润新知