存储过程,视图,临时表,事务等这些之前只是学过,但没有仔细想过是干啥的,什么情况下用。所以这就像别人让你去东边,你就去东边,但去了东边,却不知道去那干啥? 所以为了灵活应用,今天就来汇总下。
也希望对大家有帮助~
---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(); } } }
帮助类部分:
//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); } } }