07 2012 档案
摘要:透视数据(Pivoting)是一种把数据从行的状态旋转为列的状态的处理,在这个过程可能需要多值进行聚合。 生成实例数据库 USE tempdb; IF OBJECT_ID('dbo.Orders', 'U') IS NOT NULL DROP TABLE dbo.Orders; GO CREATE TABLE dbo.Orders ( orderid INT...
阅读全文
摘要:EXEC:T-SQL中最早提供的一种用于执行动态SQL的方法。EXEC接受一个字符串作为在圆括号中输入的参数,执行字符串中包含的批处理代码。EXEC命令的输入既支持普通字符,也支持Unicode字符。 使用游标对INFORMATION_SCHEMA.TABLES视图进行查询,以获取TSQLFundamentals2008数据库中表的名称。对于每个表,代码将构造和执行一个批处理代码,对当前表调用s...
阅读全文
摘要:表变量:和使用局部表变量一样,表变量和tempdb数据库中也有对应的表作为其物理表示,而不是像通常所理解的那样,以为表变量只存在内存中。和局部临时表类似,表变量也只是对创建它的会话可见,但允许访问的范围更有限,它只对当前批处理乐见。表类型:SQL Server 2008中引入了对表类型的支持。通过创建表类型,可以把表的定义保存到数据库中,以后在定义表变量、存储过程和用户定义的输入参数时,可以将表类型作为表的定义而重用。定义表类型(TVP):USE TSQLFundamentals2008;IF TYPE_ID('dbo.OrderTotalsByYear') IS NOT NU
阅读全文
摘要:线程池中的线程由两类组成:工作者线程和I/O线程。 ThreadPool.QueueUserWorkItem和Timer类总是将工作项(即线程要回调的委托)放到全局队列中。工作者线程采用一个FIFO算法将工作项从这个队列中取出,并处理它们。由于多个工作者线程可能同时从全局队列中拿走工作项,所以所有的工作者线程都竞争一个线程同步锁,以保证两个或者多个线程不会获取同一个工作项。 对于默认的Task...
阅读全文
摘要:为了取消一个操作,首先必须创建一个System.Threading.CancellationTokenSource对象。这个对象包含了和管理取消有关的所有状态。构造好一个CancellationTokenSource之后,可同从它的Token属性获得一个或者多个CancellationToken实例,并传给相应的操作,使得那些操作可以取消。在一个计算限制操作的循环中,可以定时调用Cancellat...
阅读全文
摘要:CLR为每个线程分配了从0(最低)~31(最高)的一个优先级。CLR线程的优先级取决于两个标准: 进程的优先级类 – Idle, Below Normal, Normal, Above Normal, High, Realtime 在其进程的优先级类中,线程的优先级 – Idle, Lowest, Below Normal, Normal, Above Normal, Highest...
阅读全文
摘要:线程开销包括以下几方面: 线程内核对象(Thread kernel object):包含一组对线程进行描述的属性。该数据结构中还包括线程上下文(Thread context)。上下文是一个内存块,其中包含了CPU的寄存器集合。 线程环境块(Thread environment block):用户模式中分配和初始化的一个内存块,应用程序代码能够快速访问的地址空间。 用户模式栈:用...
阅读全文
摘要:使用游标通常涉及以下步骤 在某个查询的基础上声明游标 打开游标 从第一个游标记录中把列值提取到指定的变量 当还没有超多游标的最后一行时(@@FTECH_STATUS函数的返回值是0),循环遍历游标记录;在每一次遍历中,从当前游标记录中把列值提取到指定的变量,再为当前行执行相应的处理 关闭游标 释放游标 下面的例子使用游标来计算Sales.CustOrder...
阅读全文
摘要:隔离级别用于决定如何控制并发用户读写数据的操作。可以在会话级别上用会话选项来设置隔离级别,也可以在查询级别上用表提示来设置隔离级别。可设置的隔离级别有6个: READ UNCOMMITTED - 未提交读 READ COMMITTED - 已提交读,默认值 REPEATABLE READ - 可重复读 SERIALIZABLE - 可序列化 SNAPSHOT - 快...
阅读全文
摘要:using System;using System.Threading;namespace APMResearch{ public delegate T Func<T>(); public class SimpleAsyncResult<T> :IAsyncResult { private volatile int _mIsCompleted; pri...
阅读全文
摘要:USE TSQLFundamentals2008Connection 1:BEGIN TRAN;UPDATE Production.ProductsSET unitprice=unitprice+1.0WHERE productid=2;为了更新这一行,会话必须先获得一个排它锁,更新成功后将释放这个排它锁Connection 2:SELECT productid,unitpriceFROM Production.ProductsWHERE productid=2为了读取数据,会话需要一个共享锁,但是这一行已经被其他会话持有的排它锁锁定,因而获取不到共享锁,所以这个会话会被阻塞Connectio
阅读全文
摘要:排它锁:当视图修改数据时,事务会为所以来的数据资源请求排它锁,一旦授予,事务将一直持有排它锁,直至事务完成。这种锁模式之所以称为排它锁,是因为相对于相同的数据资源,如果有其他事务已经获得了该资源的任何类型的锁,就不能再获得该资源的排它锁;如果有其他事务已经获得该资源的排它锁,就不能再获得该资源的任何类型的锁。共享锁:当视图读取数据时,事务默认会为所依赖的数据资源请求共享锁,读操作一完成,就立即释放资源上的共享锁。这种锁模式之所以成为共享锁,是因为多个事务可以同事持有同一数据资源上的共享锁。事务之间锁的相互制约关系:如果数据正在由一个事务进行修改,其他事务就既不能修改该数据,也不能读取(至少默认
阅读全文