最近几天写存储过程,总结一下零碎知识

 

一、关于存储过程中的表:

存储过程中可以创建两类表,临时表和实体表,其创建方式如下:

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)、实体表:不知道这样称呼标准不?可能还有别的称呼

ACreate 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.dbosql server数据库中所有临时表的存放目录

说明:B也可以用来判断实体表,应该更简单!

 

二、 更改列名(字段名)

在做存储过程中,需要修改列名,即字段名。注意,不是修改列属性。如果修改列属性,用Alter即可,修改列名必须使用系统自带的存储过程:sp_rename

修改实体表的列名:

Exec sp_rename ‘table_name.列名’,‘修改后的列名’,‘column’

不知道为什么,我在修改临时表的列名时,老是报错!如,

Exec sp_rename ‘tempdb.dbo.#table_name.列名’,’修改后的列名’,’column’

待研究!!!

posted @ 2008-12-11 17:44  pjh123  阅读(241)  评论(0编辑  收藏  举报