- 論壇徽章:
- 0
|
本帖最后由 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不存在' |
|