易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL知识大杂烩


$$$为每节的开始
-------------------------------------------------------------------------------------------------------------------------------------------------
$$$ SQL中系统临时表的使用和禁忌 及 Exec(SQLScript) 的使用
以前在SQL 中写SP 时,如比较复杂时,喜欢中间使用临时表来暂存相关记录,这样的好处有很多,提高效率,提高程序的可读性等。当然后临时表的使用,一般均会使用用户临时表,即 #TempTable, 但有一些情况下,偶尔也会使用系统临时表,即 ##TempTable。 
两种临时表的的使用语法差不多,可用几种方法来建立,可 Create ,也可 Select Into 。 
当然关键的是系统临时表和用户临时表的区别:(如下) 
1)用户临时表:用户临时表的名称以单个数字符号(#)开头; 
用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的. 
当创建它的进程消失时这个临时表就自动删除. 
2)系统临时表:系统临时表的名称以数字符号(##)开头 
全局临时表对整个SQL Server实例都可见,但是所有访问它的Session都消失的时候,它也自动删除. 
明白了这些就知道了他们的用途和限制,但有一些地方还是容易出问题,故在此专门列出。 
1, 在使用 Exec(SQLScript) 执行Script 时,其间也相当于单独有一个进程处理,故执行期间内如果创建用户临时表的话,在执行完成后也就结束了,即执行完成后,你不可以使用在 SQLScript 中生成的用户临时表,可以用系统临时表代替。 
2, 在使用用户临时表时,有一个问题要注意,就是最好在建立时指定其用户为 dbo ,以避免可能的问题; 
3, 在使用系统临时表时,一定要考虑到,不可以将其用于多用户使用的环境功能或系统中,否则就可能出现冲突的问题,导致结果不可预料。 
如果在多用户使用的环境中使用系统临时表,则可能会出现多个用户同时对同一系统临时表进行处理,从而导致冲突和数据的错误。以前没有注意这一点,我就因此而浪费过不少的时间。 
有时需要使用Exec(SQLScript)方式产生数据,但其中只能使用系统临时表,如何处理呢? 
1, 可以预先定义好一个用户临时表,然后使用 Insert #TempTable Exec(SQLScript) 的方式,即可将Exec 产生的结果记录加入用户临时表,从而避免使用系统临时表; 
2, 从根本上避免使用 Exec() ,可用其它方式代替。 
Exec() 的使用是因为有一些 Script 比较复


相关文档:

Sql语句学习笔记(2) 创建数据表

use RetalDB--表示在数据库RetalDB中进行的操作
go
if exists (select * from sysobjects where name='tb_user')
 drop table tb_user
go
--创建客户表tb_user
create table tb_user
(
 user_id int primary key,--指定为主键时,此列默认为非空,指定过多个限制条件时不用“'”隔开
 us ......

sql语句 时间格式转换(Convert用法) 参考

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varch ......

SQL Server 2008 Resource Governor

 
一、问题引出:
当某一台SQL Server实例上创建有多个数据库的时候,如果某一个数据库过度占有系统资源,往往会导致其它数据库性能受到严重影响,甚至大大降低整个数据库的性能。
这种情况下,如果有一种技术或者方法可以限制数据库资源的占有量,给与一个峰值,从而给与其它的数据库足够的资源。那么这个问题就可 ......

sql语句学习笔记(5) sql语法

1.sql是一种脚本语言
2.sql可写脚本程序,但最重要的作用发挥在对数据库的操作上
3.sql server2005中的注释有两种/***/多行注释,--可以单行注释
4.sql中的自定义变量以@开头,系统变量以@@开头
5.sql中声明变量和VB类似,使用declare声明变量如:declare @i int,@j int,此语句声明了2个整形变量@i和@j
6.sql中的数据 ......

讨论 并发执行SQL时的更新丢失,如何解决这种问题

    最近遇到一个问题,在操作SQL更新账户余额时,常常发现更新后的余额与实际的不相符,马上想到了是不是存在并发更新,一查果然如此。之前也曾遇到过这样的问题,当时没太在意,现在是解决的时候了。用Mysql模拟了一下这个过程:创建两张表,paralltable和parallalter,每次根据paratable表更新parallalte ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号