亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 4621 | 回復(fù): 3
打印 上一主題 下一主題

判斷表是否存在 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-03-09 19:17 |只看該作者 |倒序?yàn)g覽
sqlserver中判斷表是否存在 收藏

   1. 在sqlserver(應(yīng)該說(shuō)在目前所有數(shù)據(jù)庫(kù)產(chǎn)品)中創(chuàng)建一個(gè)資源如表,視圖,存儲(chǔ)過(guò)程中都要判斷與創(chuàng)建的資源是否已經(jīng)存在
   2. 在sqlserver中一般可通過(guò)查詢sys.objects系統(tǒng)表來(lái)得知結(jié)果,不過(guò)可以有更方便的方法
   3. 如下:
   4.     if   object_id('tb_table') is not null
   5.         print 'exist'
   6.     else
   7.         print'not exist'
   8. 如上,可用object_id()來(lái)快速達(dá)到相同的目的,tb_table就是我將要?jiǎng)?chuàng)建的資源的名稱,所以要先判斷當(dāng)前數(shù)據(jù)庫(kù)中不存在相同的資源
   9. object_id()可接受兩個(gè)參數(shù),第一個(gè)如上所示,代表資源的名稱,上面的就是表的名字,但往往我們要說(shuō)明我們所要?jiǎng)?chuàng)建的是什么類型的資源,
  10. 這樣sql可以明確地在一種類型的資源中查找是否有重復(fù)的名字,如下:
  11.     if   object_id('tb_table','u') is not null
  12.         print 'exist'
  13.     else
  14.         print'not exist'
  15.
  16. 第二個(gè)參數(shù) "u" 就表示tb_table是用戶創(chuàng)建的表,即:USER_TABLE地首字母簡(jiǎn)寫(xiě)
  17. 查詢sys.objects中可得到各種資源的類型名稱(TYPE列),這里之舉幾個(gè)主要的例子
  18. u  -----------  用戶創(chuàng)建的表,區(qū)別于系統(tǒng)表(USER_TABLE)
  19. s  -----------  系統(tǒng)表(SYSTEM_TABLE)
  20. v  -----------  視圖(VIEW)
  21. p  -----------  存儲(chǔ)過(guò)程(SQL_STORED_PROCEDURE)
  22. 可使用select distinct type ,type_desc from sys.objects 獲得全部信息

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-03-09 19:19 |只看該作者
現(xiàn)在需要利用批處理調(diào)用SQL腳本文件更新數(shù)據(jù)庫(kù),其中有幾個(gè)表需要增加字段,希望在添加字段的時(shí)候先判斷該字段是否已經(jīng)存在,哪位兄弟有做過(guò)的?請(qǐng)指教。
嘗試過(guò)在information_schema獲取指定表的信息:
select COLUMN_NAME from information_schema.COLUMNS where TABLE_SCHEMA='database_name' and TABLE_NAME='table_name' and COLUMN_NAME='column_name';
在網(wǎng)上看到有人提到利用WHERE NOT EXISTS(.....),但經(jīng)過(guò)多次嘗試都還是不行。。。
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';
)
-----------------
懸賞分先隨意,十分感謝各位關(guān)注我的問(wèn)題,謝謝!!

最佳答案

Mysql使用Describe命令判斷字段是否存在

工作時(shí)需要取得MySQL中一個(gè)表的字段是否存在 于是就使用Describe命令來(lái)判斷 mysql_connect('localhost', 'root', 'root'); mysql_select_db('demo'); $test = mysql_query('Describe cdb_posts first'); $test = mysql_fetch_array($test); $test[0]返回的是該字段的名
  

工作時(shí)需要取得MySQL中一個(gè)表的字段是否存在
于是就使用Describe命令來(lái)判斷
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,通過(guò)這樣可以判斷一個(gè)字段是否存在

附加資料:

describe命令
一、describe命令用于查看特定表的詳細(xì)設(shè)計(jì)信息,例如為了查看guestbook表的設(shè)計(jì)信息,可用:
describe guestbook

二、可通過(guò)”show comnus”來(lái)查看數(shù)據(jù)庫(kù)中表的列名,有兩種使用方式:
show columns form 表名 from 數(shù)據(jù)庫(kù)名
或者:
show columns from 數(shù)據(jù)庫(kù)名.表名

三、用describe命令查詢具體列的信息
describe guestbook id
就是查詢guestbook中id字段的列信息

{DESCRIBE | DESC} tbl_name [col_name | wild]
DESCRIBE 是 SHOW COLUMNS FROM 的縮寫(xiě)。DESCRIBE 提供有關(guān)一個(gè)表的列信息。col_name 可以是一個(gè)列名或是一個(gè)包含 SQL 通配符字符 “%” 和 “_” 的字符串。沒(méi)有必要用引號(hào)包圍字符串。

如果列類型不同于你所期望的基于一個(gè) CREATE TABLE 語(yǔ)句建立的列,注意 MySQL 有時(shí)會(huì)更改列類型。這個(gè)語(yǔ)句是提供給與 Oracle 兼容的。

參考資料:http://www.abc188.com/info/html/ ... 20080630/72897.html


MYSQL:如何用sql語(yǔ)句來(lái)判斷一個(gè)表是否存在
2009年03月16日 星期一 15:56
用sql語(yǔ)句來(lái)判斷一個(gè)表是否存在有兩種方法。
方法一:
show tables like 'your_table_name';
如果這個(gè)表存在,則返回一條記錄,如果不存在,返回0行記錄。


方法二:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'your_database'
AND table_name = 'your_table_name';
這種方法需要知道數(shù)據(jù)庫(kù)名稱。  字段也一樣

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-03-09 19:22 |只看該作者
本帖最后由 liyihongcug 于 2011-03-09 19:24 編輯

開(kāi)發(fā)了一個(gè)檔案管理軟件 (有30多個(gè)單位在用)
現(xiàn)在要對(duì)其進(jìn)行升級(jí)打補(bǔ)丁 需要調(diào)整SQLserver表中增加一個(gè)字段。
問(wèn)題:我發(fā)布了1。0的補(bǔ)丁 里面增加了2個(gè)字段a,b
現(xiàn)在要發(fā)布1。1版的補(bǔ)丁 還需新增一個(gè)字段 c
我想在1。1版的補(bǔ)丁中實(shí)現(xiàn) 首先判斷是否已打上1。0版的補(bǔ)丁 即是否存在字段a,b 如不存在 就執(zhí)行增加該兩字段的代碼 ,存在就跳過(guò)
不知各位大大誰(shuí)知道在SQL Server中如何判斷表中是否已存在某字段
只剩70分了 實(shí)在不好意思 各位老大幫幫忙把  


來(lái)自:SuperSoft, 時(shí)間:2004-4-1 8:59:11, ID:2532734
TADOQuery用TFields屬性啊
讀表判斷一下即可  


來(lái)自:yf168, 時(shí)間:2004-4-1 9:02:23, ID:2532743
看看 syscolumns(各表的所有字段),sysobjects(所有的表) 都在里面呢
通過(guò)ID連的,你自己看看 就知道[]  


來(lái)自:TYZhang, 時(shí)間:2004-4-1 9:02:30, ID:2532744
syscolumns表查看字段
sysobjects表查看用戶表,兩個(gè)配合使用。  


來(lái)自:kk2000, 時(shí)間:2004-4-1 9:06:43, ID:2532757
if exists(select 1 from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=@BillType AND COLUMN_NAME='BillNo')
這個(gè)應(yīng)該是你要的!@BillType 指的是表的名稱   


來(lái)自:gzyhl, 時(shí)間:2004-4-1 9:07:58, ID:2532762
用Table1.GetFieldNames(listbox1.Items)將表中字段讀入到ListBox1列表中,
再判斷是否有你要的字段。  


來(lái)自:lixy, 時(shí)間:2004-4-1 9:20:10, ID:2532796
寫(xiě)一個(gè)例子:
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  


來(lái)自:過(guò)河卒, 時(shí)間:2004-4-1 16:27:45, ID:2533988
利用Sql Server中自帶的系統(tǒng)過(guò)程sp_column;方法:adoquery1.sql.add('sp_column tablename'),在我們進(jìn)行數(shù)據(jù)庫(kù)編程的時(shí)候,可能會(huì)遇到這樣的情形,需要對(duì)某個(gè)表或字段是否存在進(jìn)行判斷,這個(gè)時(shí)候,我們可以打開(kāi)Management Studio或者企業(yè)管理器,在本機(jī)->Databases->System Databases->master->Views->System Views找到一系列預(yù)制好的視圖,此間我們可以找到關(guān)于整個(gè)Sql Server所有數(shù)據(jù)庫(kù)實(shí)例的各種有用的信息。其實(shí)系統(tǒng)表master本身就是一個(gè)關(guān)乎維護(hù)整個(gè)Sql Server系統(tǒng)的數(shù)據(jù)庫(kù)。如圖:
       所有的試圖中,有兩個(gè)試圖分別名叫sys.tables和sys.columns。他們分別是關(guān)于系統(tǒng)中所有表和所有字段的試圖。要想知道一個(gè)表是否存在可以這樣寫(xiě):
IF (SELECT count(*) FROM sys.tables WHERE name = '表1') = 0 ......
其中“表1”為我們想要查找的表名,省略號(hào)是之后我們想進(jìn)行的動(dòng)作,比如我們可以create table等。判斷一個(gè)字段是否存在的方法照葫蘆畫(huà)瓢:
IF (SELECT count(*) FROM sys.columns WHERE name = '列1') = 0 ......
要想知道具體某一表下某個(gè)字段是否存在可以這樣寫(xiě):
IF (SELECT count(*) FROM sys.columns WHERE object_id =
                                          (SELECT object_id FROM sys.tables WHERE name = '表1')
                and name = '列1') = 0......
其中object_id是每個(gè)表在整個(gè)Sql Server中的全局ID,上面的SQL語(yǔ)句可以判斷在表1下是否有列1這個(gè)字段,很簡(jiǎn)單。
        master數(shù)據(jù)庫(kù)在Sql Server中起著很特別的作用,仔細(xì)研究一下master這個(gè)數(shù)據(jù)庫(kù),我們還可以挖掘出很多別的有用信息,這些信息在我們進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)有時(shí)特別有用,暫不一一列舉。


--判斷[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]數(shù)據(jù)中[TestTb]表中是否存在[Name]字段
if exists(select * from TestDB..syscolumns where id=object_id('TestDB.dbo.TestTb') and name
'Name')
    print '字段Name存在'
else
    print '字段Name不存在'

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-03-11 19:01 |只看該作者
存儲(chǔ)過(guò)程

if(exists(select * from sysobjects where name='存儲(chǔ)過(guò)程的名字' and Type='P'))



觸發(fā)器:

  select * from sysobjects where id=object_id(N'觸發(fā)器的名字') and objectproperty(id,N'IsTrigger')=1

如果判斷用戶表格的話,用IsUserTable 代替 上面的IsTrigger



函數(shù)

select * from sysobjects where id = object_id(N'[dbo].[USER_Fun]') and (type = 'FN' or type = 'TF'))
--判斷是否存在USER_Fun這個(gè)用戶函數(shù)(注意此處的type 有兩種,分別是'TF'-Table-valued Function 表值函數(shù) 或'FN'-Scalar-valued Function 標(biāo)量值函數(shù))

特別提醒:如果你覺(jué)得這篇文章還算不錯(cuò),并且在看完之后有所啟發(fā),請(qǐng)你順手做幾個(gè)簡(jiǎn)單的事情: 1、寫(xiě)一小段評(píng)論,談一下你自己的想法 2、將此博客,轉(zhuǎn)發(fā)給你的QQ上的3位好友。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP