临时表

SQL Server 临时表 Vs 表变量

强颜欢笑 提交于 2020-02-25 16:00:45
开始 说临时表和表变量,这是一个古老的话题,我们在网上也找到很多的资料阐述两者的特征,优点与缺点。这里我们在SQL Server 2005\SQL Server 2008版本上通过举例子,说明临时表和表变量两者的一些特征,让我们对临时表和表变量有进一步的认识。在本章中,我们将从下面几个方面去进行描述,对其中的一些特征举例子说明: 约束(Constraint) 索引(Index) I/0开销 作用域(scope) 存儲位置 其他 例子描述 约束(Constraint) 在临时表和表变量,都可以创建Constraint。针对表变量,只有定义时能加Constraint。 e.g.在Microsoft SQL Server Management Studio(MSSMS)查询中,创建临时表并建Constraint场景,<脚本S1.> Use tempdbgoif object_id('Tempdb..#1') Is Not Null Drop Table #1 GoCreate Table #1( ID int, Nr nvarchar(50) not null, OperationTime datetime default (getdate()), Constraint PK_#1_ID Primary Key (ID))Alter Table #1 Add Constraint CK_

SQL的一些经典算法

纵然是瞬间 提交于 2020-02-24 07:20:59
1 SQL分页查询,每页10个数据,取第三页 A) 如果有id列 select top(10) * from Spider_Hotel where Spider_Hotel.HotelId not in ( select top (10*2) Spider_Hotel.HotelId from Spider_Hotel) B) 如果没有id列 select top (10) * from (select ROW_NUMBER() over (order by Name) as Row,* from Spider_Hotel) a where Row>10*2 C) 如果有id列 select top (10) * from Spider_Hotel where HotelId >(select max(HotelId) from (select top (10*2) HotelId from Spider_Hotel order by HotelId) as a ) 2,数据库删除重复记录。 a, 如果有id列 a,b,c 重复 Delete from table where id not in (select max (id) from table group a,b,c) b, 如果没有id列a,b,c 重复 .用row_number() over 函数,制造个Id列 With

SQL 存储过程

旧巷老猫 提交于 2020-02-23 16:24:54
一、定义变量 --简单赋值 declare @a int set @a=5 print @a --使用select语句赋值 declare @user1 nvarchar(50) select @user1='张三' print @user1 declare @user2 nvarchar(50) select @user2 = Name from ST_User where ID=1 print @user2 --使用update语句赋值 declare @user3 nvarchar(50) update ST_User set @user3 = Name where ID=1 print @user3 二、表、临时表、表变量 --创建临时表1 create table #DU_User1 ( [ID] [int] NOT NULL, [Oid] [int] NOT NULL, [Login] [nvarchar](50) NOT NULL, [Rtx] [nvarchar](4) NOT NULL, [Name] [nvarchar](5) NOT NULL, [Password] [nvarchar](max) NULL, [State] [nvarchar](8) NOT NULL ); --向临时表1插入一条记录 insert into #DU_User1 (ID

如何将SQLite数据几列数据写入服务器的SQLSERVER数据库

纵饮孤独 提交于 2020-02-22 14:02:41
SQLite的表和SQLSERVER是一样的 有三个列 CompanyCode CompanyName UpdateFlag Dim ds As DataSet = New DataSet() Dim sql As String sql = " Select * from M_Acc_Title where CompanyCode = '" & CompanyCode & "' and UpdateFlag= '" & UpdateFlag& "'" ds = SQLiteHelper.Query(GlobalCN.LocalCnString, sql)'获取SQLite数据 想将查询出来的结果插入或者更新到服务器上面。 如果,服务器数据库存在相同的CompanyCode ,将相对的CompanyName更新上去, 不存在则插入。 你上面的代码不是拿出了sqlite的数据嘛 你再拿出sqlserver的数据 判断sqlserver中的数据是否存在相同的CompanyCode 如果存在就更新 不存在就新增 dataset里的表,可以批量更新到一个临时表下。然后用merge命令来更新或插入到 目标表就可以了。 merge 目标表 using #临时表 on #临时表.Id = 目标表.Id when matched then update set Name=#临时表.Name --

【转】SQL Server 中的临时表

ぃ、小莉子 提交于 2020-02-20 19:02:13
最经工作中经常要用到的 SQL query (in SQL server), 发现这个临时表在处理数据时比较方便, 优点如下: 那么什么是SQL server中的临时表,什么时候需要用到临时表?又该如何使用呢? SQL Server 中的临时表分类: 本地临时表 仅限于当前访问者访问,创建方法去如下: create table #TableName(表结构) 储存于数据库tempdb内(硬盘),当前用户断开连接,自动删除 如果使用中不断开连接,且不需要该临时表请执行:drop table #TableName 全局临时表 所有访问用户访问,创建方法去如下: create table ##TableName(表结构) 储存于数据库tempdb内,当所有访问用户断开连接,自动删除 删除语句:drop table ##TableName 2. 什么时候需要用到临时表呢? 假设一个表里面的数据有非常非常多,需要频繁的查询这个表里的相似数据 可以把相似数据放入一个临时表 3. 如何创建临时表 创建临时表 方法一: create table #临时表名(字段1 约束条件, 字段2 约束条件, .....) create table ##临时表名(字段1 约束条件, 字段2 约束条件, .....) 方法二: select * into #临时表名 from 你的表; select * into

(数据库)12_创建和管理表

喜夏-厌秋 提交于 2020-02-19 05:15:59
12_创建和管理表 一、常见的数据库对象 二、Oracle 数据库中的表 1.查询数据字典 三、表的命名规则 四、表空间 五、CREATE TABLE 语句 1.创建表 2.数据类型 3.使用子查询创建表 六、ALTER TABLE 语句 1.使用 ALTER TABLE 语句追加, 修改, 或删除列的语法 2.实例 七、删除表 八、清空表 九、改变对象的名称 总 结 目标 描述主要的数据库对象 创建表 描述各种数据类型 修改表的定义 删除,重命名和清空表 一、常见的数据库对象 二、Oracle 数据库中的表 ①用户定义的表: 用户自己创建并维护的一组表 包含了用户所需的信息 如:SELECT * FROM user_tables;查看用户创建的表 ②数据字典: 由 Oracle Server 自动创建的一组表 包含数据库信息 1.查询数据字典 查看当前用户的所定义的表: SELECT * FROM user_tables 查看用户定义的各种数据库对象: --查询用户所定义的数据库对象类型 SELECT DISTINCT object_type FROM user_objects ; 查看用户定义的表, 视图, 同义词和序列: --查看用户定义的表, 视图, 同义词和序列 SELECT * FROM user_catalog 三、表的命名规则 表名和列名: 必须以 字母开头 必须在

oracle创建用户、表空间、临时表空间、分配权限步骤详解

做~自己de王妃 提交于 2020-02-19 04:52:09
首先登陆管理员账号,或者有DBA权限的用户,接下来依次: --查询所有用户 select * from dba_users; --创建新用户 create user gpmgt identified by GPMGT; --查看所有用户所在表空间 select username,default_tablespace from dba_users; --查询所有表空间路径 select * from dba_data_files ; --创建一个表空间 create tablespace GPMGT_DATA datafile 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\GPMGT_DATA_1.DBF' size 200m autoextend on next 32m maxsize 2048m extent management local; --创建临时表空间 --表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间,可自动释放;而表空间中存储表数据、函数、过程、序列等。是随数据库永久存在的。 create temporary tablespace GPMGT_TEMP tempfile 'D:\APP

SQLServer 存储过程调优小结

你说的曾经没有我的故事 提交于 2020-02-19 01:55:42
公司服务器崩了,很多测试环境用不了,弄了一个生产库还原到本地,调了下统计分析系统的一些存储过程: 场景:首页一进去就加载七个报表,而且是实时计算的。。。不光耗资源,还会锁住ajax,串行一个个执行这七个存储过程,导致其它的ajax执行不了(表现在点击其它子菜单无响应,要等前面ajax用完了才会轮到后面) 1、固化数据、缓存什么的,先不考虑,还是按原样先动态实时取首页吧,接手过来的项目先不急着翻新,先看能否花半天一天优化。 2、按前几天学的在控制器上设置Session的ReadOnly,刷新首页发现死锁。。。而且是每次必死锁 3、检查存储过程,发现里面都有两句UPDATE全库的一个字段,如果是NULL则取另一个值。这个没必要每次查询都去全库更新,会锁表,也不可能存在这么多异常数据,这种数据修正的,放在每晚同步时处理就好了,去掉后不再死锁。 4、并行后,速度反正不如原先串行的。。。串行的每个执行只要1~3秒(虽然也不短),但整体下来还好,一个个等它轮圈,二十秒左右也全部加载完了。但并行后,每个都要花掉10~20秒左右。。。翻了好几倍 5、复制出来执行,一个个又恢复到1~3秒,怀疑是并发引起,又不好重现并发场景,就把SQL窗口缩小,屏幕上并排摆了7个,一个个快速切换到窗口用快捷键执行,这样也重现出了速度慢的情况。 6、观察存储过程,有两张大表(几十万),没加索引。加完索引后,效果不明显。

数据库性能优化

我是研究僧i 提交于 2020-02-16 07:26:30
数据库设计   实现sql server数据库的优化,首先要有一个好的数据库设计方案。在实际工作中,许多sql server方案往往是由于数据库设计得不好导致性能很差。实现良好的数据库设计必须考虑这些问题:   1. 逻辑数据库规范化问题    一般来说,逻辑数据库设计会满足规范化的前3级标准:    第1规范:没有重复的组或多值的列;    第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组成部分;    第3规范: 一个非关键字段不能依赖于另一个非关键字段。    遵守这些规则的数据库设计会产生较少的列和更多的表,因而也就减少了数据冗余,也减少了用于存储数据的页。   2. 生成物理数据库    要想正确选择基本物理实现策略,必须了解和利用好数据库访问格式和硬件资源的操作特点,特别是内存和磁盘子系统i/o。以下是一些常用技巧:    与每个表列相关的数据类型应该反映数据所需的最小存储空间,特别是对于被索引的列更是如此。比如能使用smallint类型就不要用integer类型,这样索引字段可以被更快地读取,而且可以在一个数据页上放置更多的数据行,因而也就减少了i/o操作。    把一个表放在某个物理设备上,再通过sql server的段把它的不分簇索引放在一个不同的物理设备上,这样能提高性能

利用SQL索引提高查询速度

十年热恋 提交于 2020-02-16 07:08:33
1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的 ISAM 索引结构。 索引的使用要恰到好处,其使用原则如下: 在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。 在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。 在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。 如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。 使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁操作而 使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量 数据后,删除并重建索引可以提高查询速度。 (1)在下面两条select语句中: SELECT * FROM table1 WHERE field1<=10000 AND field1>=0; SELECT * FROM table1