最近几天写存储过程,总结一下零碎知识
一、关于存储过程中的表:
存储过程中可以创建两类表,临时表和实体表,其创建方式如下:
(1)、临时表:
Create table #table(id int identity(1,1),列名1 int,列名2 varchar(100)……..)
Create table ##table(……..)
A、 其中,一个#表示是本地临时表(局部临时表),只有创建它的用户可以使用,当用户断开连接后,临时表会自动删除。该临时表在sql server 数据库的目录:数据库->系统数据库->tempdb->临时表下可以看到。Sql server 为每个临时表添加一个后缀,所以不通担心重名问题。所以在一个存储过程中声明的临时表,不需要去drop它,当然,如果手动去drop,更保险!
B、 两个##表示是全局临时表,在创建后,任何用户和连接都可以使用它,只有所有使用该全局临时表的用户都断开连接后,sql server才删除它。因为我现在写的存储过程都是一个个独立的,所有还没有用到。
(2)、实体表:不知道这样称呼标准不?可能还有别的称呼
A、Create table table_name(id int identity(1,1),列名1 int,列名2 varchar(100)……..)
注意,不带#标志。实体表在当前数据库中可见。声明了实体表后,如果不再使用,一定要drop 它。所以最好在声明之前,先判断一下有没有同名的,如下
A、判断存储过程中是否存在实体表
If exists (select * from sysobjects where objectproperty(object_id('table_name'),'istable') = 1)
B、判断存储过程中是否存在临时表
if object_id('tempdb.dbo.#table_name') IS not null
注意:tempdb.dbo是sql server数据库中所有临时表的存放目录
说明:B也可以用来判断实体表,应该更简单!
二、 更改列名(字段名)
在做存储过程中,需要修改列名,即字段名。注意,不是修改列属性。如果修改列属性,用Alter即可,修改列名必须使用系统自带的存储过程:sp_rename。
修改实体表的列名:
Exec sp_rename ‘table_name.列名’,‘修改后的列名’,‘column’
不知道为什么,我在修改临时表的列名时,老是报错!如,
Exec sp_rename ‘tempdb.dbo.#table_name.列名’,’修改后的列名’,’column’
待研究!!!