判断表是否存在
sqlserver中判断表是否存在 收藏
1. 在sqlserver(应该说在目前所有数据库产品)中创建一个资源如表,视图,存储过程中都要判断与创建的资源是否已经存在
2. 在sqlserver中一般可通过查询sys.objects系统表来得知结果,不过可以有更方便的方法
3. 如下:
4. if object_id('tb_table') is not null
5. print 'exist'
6. else
7. print'not exist'
8. 如上,可用object_id()来快速达到相同的目的,tb_table就是我将要创建的资源的名称,所以要先判断当前数据库中不存在相同的资源
9. object_id()可接受两个参数,第一个如上所示,代表资源的名称,上面的就是表的名字,但往往我们要说明我们所要创建的是什么类型的资源,
10. 这样sql可以明确地在一种类型的资源中查找是否有重复的名字,如下:
11. if object_id('tb_table','u') is not null
12. print 'exist'
13. else
14. print'not exist'
15.
16. 第二个参数 "u" 就表示tb_table是用户创建的表,即:USER_TABLE地首字母简写
17. 查询sys.objects中可得到各种资源的类型名称(TYPE列),这里之举几个主要的例子
18. u ----------- 用户创建的表,区别于系统表(USER_TABLE)
19. s ----------- 系统表(SYSTEM_TABLE)
20. v ----------- 视图(VIEW)
21. p ----------- 存储过程(SQL_STORED_PROCEDURE)
22. 可使用select distinct type ,type_desc from sys.objects 获得全部信息
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
存储过程
if(exists(select * from sysobjects where name='存储过程的名字' and Type='P'))
触发器:
select * from sysobjects where id=object_id(N'触发器的名字') and objectproperty(id,N'IsTrigger')=1
如果判断用户表格的话,用IsUserTable 代替 上面的IsTrigger
函数
select * from sysobjects where id = object_id(N'[dbo].[USER_Fun]') and (type = 'FN' or type = 'TF'))
--判断是否存在USER_Fun这个用户函数(注意此处的type 有两种,分别是'TF'-Table-valued Function 表值函数 或'FN'-Scalar-valued Function 标量值函数)
特别提醒:如果你觉得这篇文章还算不错,并且在看完之后有所启发,请你顺手做几个简单的事情: 1、写一小段评论,谈一下你自己的想法 2、将此博客,转发给你的QQ上的3位好友。
本帖最后由 liyihongcug 于 2011-03-09 19:24 编辑
开发了一个档案管理软件 (有30多个单位在用)
现在要对其进行升级打补丁 需要调整SQLserver表中增加一个字段。
问题:我发布了1。0的补丁 里面增加了2个字段a,b
现在要发布1。1版的补丁 还需新增一个字段 c
我想在1。1版的补丁中实现 首先判断是否已打上1。0版的补丁 即是否存在字段a,b 如不存在 就执行增加该两字段的代码 ,存在就跳过
不知各位大大谁知道在SQL Server中如何判断表中是否已存在某字段
只剩70分了 实在不好意思 各位老大帮帮忙把
来自:SuperSoft, 时间:2004-4-1 8:59:11, ID:2532734
TADOQuery用TFields属性啊
读表判断一下即可
来自:yf168, 时间:2004-4-1 9:02:23, ID:2532743
看看 syscolumns(各表的所有字段),sysobjects(所有的表) 都在里面呢
通过ID连的,你自己看看 就知道[]
来自:TYZhang, 时间:2004-4-1 9:02:30, ID:2532744
syscolumns表查看字段
sysobjects表查看用户表,两个配合使用。
来自:kk2000, 时间:2004-4-1 9:06:43, ID:2532757
if exists(select 1 from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=@BillType AND COLUMN_NAME='BillNo')
这个应该是你要的!@BillType 指的是表的名称
来自:gzyhl, 时间:2004-4-1 9:07:58, ID:2532762
用Table1.GetFieldNames(listbox1.Items)将表中字段读入到ListBox1列表中,
再判断是否有你要的字段。
来自:lixy, 时间:2004-4-1 9:20:10, ID:2532796
写一个例子:
if not exists(select B.name from sysobjects A,syscolumns B
where A.id=B.id and
A.type='U' and
A.name='TableName' and
B.name='FieldName' )
alter table TableName add FieldName varchar(30) null
来自:过河卒, 时间:2004-4-1 16:27:45, ID:2533988
利用Sql Server中自带的系统过程sp_column;方法:adoquery1.sql.add('sp_column tablename'),在我们进行数据库编程的时候,可能会遇到这样的情形,需要对某个表或字段是否存在进行判断,这个时候,我们可以打开Management Studio或者企业管理器,在本机->Databases->System Databases->master->Views->System Views找到一系列预制好的视图,此间我们可以找到关于整个Sql Server所有数据库实例的各种有用的信息。其实系统表master本身就是一个关乎维护整个Sql Server系统的数据库。如图:
所有的试图中,有两个试图分别名叫sys.tables和sys.columns。他们分别是关于系统中所有表和所有字段的试图。要想知道一个表是否存在可以这样写:
IF (SELECT count(*) FROM sys.tables WHERE name = '表1') = 0 ......
其中“表1”为我们想要查找的表名,省略号是之后我们想进行的动作,比如我们可以create table等。判断一个字段是否存在的方法照葫芦画瓢:
IF (SELECT count(*) FROM sys.columns WHERE name = '列1') = 0 ......
要想知道具体某一表下某个字段是否存在可以这样写:
IF (SELECT count(*) FROM sys.columns WHERE object_id =
(SELECT object_id FROM sys.tables WHERE name = '表1')
and name = '列1') = 0......
其中object_id是每个表在整个Sql Server中的全局ID,上面的SQL语句可以判断在表1下是否有列1这个字段,很简单。
master数据库在Sql Server中起着很特别的作用,仔细研究一下master这个数据库,我们还可以挖掘出很多别的有用信息,这些信息在我们进行数据库操作时有时特别有用,暂不一一列举。
--判断[TestDB]是否存在
if exists(select 1 from master..sysdatabases where name='TestDB')
print 'TestDB存在'
else
print 'TestDB不存在'
--判断表[TestTb]是否存在
if exists(select * from TestDB..syscolumns where id=object_id('TestDB.dbo.TestTb'))
print '表TestTb存在'
else
print '表TestTb不存在'
--判断[TestDB]数据中[TestTb]表中是否存在[Name]字段
if exists(select * from TestDB..syscolumns where id=object_id('TestDB.dbo.TestTb') and name
'Name')
print '字段Name存在'
else
print '字段Name不存在'
现在需要利用批处理调用SQL脚本文件更新数据库,其中有几个表需要增加字段,希望在添加字段的时候先判断该字段是否已经存在,哪位兄弟有做过的?请指教。
尝试过在information_schema获取指定表的信息:
select COLUMN_NAME from information_schema.COLUMNS where TABLE_SCHEMA='database_name' and TABLE_NAME='table_name' and COLUMN_NAME='column_name';
在网上看到有人提到利用WHERE NOT EXISTS(.....),但经过多次尝试都还是不行。。。
ALTER TABLE `tab_phonebook` ADD COLUMN `column_name` int(4) default NULL
WHERE NOT EXISTS (select COLUMN_NAME from information_schema.COLUMNS where TABLE_SCHEMA='database_name' and TABLE_NAME='table_name' and COLUMN_NAME='column_name';
)
-----------------
悬赏分先随意,十分感谢各位关注我的问题,谢谢!!
最佳答案
Mysql使用Describe命令判断字段是否存在
工作时需要取得MySQL中一个表的字段是否存在 于是就使用Describe命令来判断 mysql_connect('localhost', 'root', 'root'); mysql_select_db('demo'); $test = mysql_query('Describe cdb_posts first'); $test = mysql_fetch_array($test); $test[0]返回的是该字段的名
工作时需要取得MySQL中一个表的字段是否存在
于是就使用Describe命令来判断
mysql_connect('localhost', 'root', 'root');
mysql_select_db('demo');
$test = mysql_query('Describe cdb_posts first');
$test = mysql_fetch_array($test);
$test[0]返回的是该字段的名称,比如我要查询first字段,返回的就是first
如果此字段不存在返回的就是NULL,通过这样可以判断一个字段是否存在
附加资料:
describe命令
一、describe命令用于查看特定表的详细设计信息,例如为了查看guestbook表的设计信息,可用:
describe guestbook
二、可通过”show comnus”来查看数据库中表的列名,有两种使用方式:
show columns form 表名 from 数据库名
或者:
show columns from 数据库名.表名
三、用describe命令查询具体列的信息
describe guestbook id
就是查询guestbook中id字段的列信息
{DESCRIBE | DESC} tbl_name [col_name | wild]
DESCRIBE 是 SHOW COLUMNS FROM 的缩写。DESCRIBE 提供有关一个表的列信息。col_name 可以是一个列名或是一个包含 SQL 通配符字符 “%” 和 “_” 的字符串。没有必要用引号包围字符串。
如果列类型不同于你所期望的基于一个 CREATE TABLE 语句建立的列,注意 MySQL 有时会更改列类型。这个语句是提供给与 Oracle 兼容的。
参考资料:http://www.abc188.com/info/html/ ... 20080630/72897.html
MYSQL:如何用sql语句来判断一个表是否存在
2009年03月16日 星期一 15:56
用sql语句来判断一个表是否存在有两种方法。
方法一:
show tables like 'your_table_name';
如果这个表存在,则返回一条记录,如果不存在,返回0行记录。
方法二:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'your_database'
AND table_name = 'your_table_name';
这种方法需要知道数据库名称。 字段也一样