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

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

也希望对大家有帮助~

---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
原文地址:https://www.cnblogs.com/shuai7boy/p/6611370.html