在SQL Server 2005所有表中搜索某個(gè)指定列的方法
有時(shí)候我們只知道列的名字,但是不知道這列數(shù)據(jù)到底在哪個(gè)表里面,那么可以用下面的辦法把含有這列數(shù)據(jù)的表查找出來(lái)。
Select O.name objectName, C.name ColumnName from sys.columns C inner join sys.objects O ON C.object_id=O.object_id where C.name like '%ColumnName%'order by O.name, C.name
在你實(shí)際試用中,把ColumnName換成你要查的列的名字就可以了。
字符串在某字段里時(shí),如何寫搜索的SQL語(yǔ)句
問(wèn)題描述:
經(jīng)常遇到這種問(wèn)題,我們搜索的條件是某字符串包含在某字段,如果是某字段包含在某字符串,我們知道可以用in,
如sql="select * form tb where tb.name in(" & names & " )”
注釋:name是表tb的字段,name是獲得的字符串,該句查詢字段name在給的字符串names里的所有集合)
這種方法自然不必多說(shuō),但我們通常遇到的問(wèn)題是“反著來(lái)”,即 "name"字符串 在 tb.name表字段里,如,表tb的name字段值為:張三,李四,王五,趙六
而我們要查詢的name=張三,這就要判斷當(dāng)表的name字段包含查詢條件,也就是有“張三”時(shí),即為符合查詢
解決方法:
1、最先想到的當(dāng)然是like查詢(并非終極解決方案,終極方法繼續(xù)往下看)
如sql="select * form tb where tb.name like '%" & 張三 & "%' ”
解釋一下,這個(gè)語(yǔ)句,能查詢到所有表的name字段里有”張三“的集合,可是,假設(shè)有人的名字叫”秦張三八“,他的名字不管爹媽怎么取的,總之也有”張三“兩個(gè)字,這樣很顯然也符合查詢情況,那么他自然也會(huì)被查詢出來(lái),而我們只要”張三“,不要”秦張三八“,看下一步
2、試想一下,如果字段里的值不是“張三,李四,王五,趙六”,而是“,張三,李四,王五,趙六,”
發(fā)現(xiàn)什么了?
是的,字符串前后多了個(gè)逗號(hào),這就有用了,因?yàn)槎禾?hào)可以作為限制條件,如果“秦張三八”此時(shí)也在這個(gè)字段里,他的前后也有逗號(hào),這樣按逗號(hào)來(lái)控制查詢,就精確到位了
好了,改寫查詢成:sql="select * form tb where tb.name like '%," & 張三 & ",%' ”
到此,原理和解決方法就已經(jīng)全部說(shuō)完了,但是,你可能還會(huì)遇到以下問(wèn)題,繼續(xù)看第三步。
3、有時(shí)類似這種帶逗號(hào)的字段都是我們?cè)诒4娴臅r(shí)候勾選了多選check得來(lái)的值,這時(shí)寫入數(shù)據(jù)庫(kù)的時(shí)候,會(huì)自動(dòng)在不同的check值后加上逗號(hào),
比如,請(qǐng)選擇你的興趣愛(ài)好,你可能會(huì)勾選“看書(shū)(value=1)”,“聽(tīng)歌(value=21)”,“爬山(value=13)”
此時(shí)得到的值就是xingquaihao="1, 21, 13",將這個(gè)字段保存,在數(shù)據(jù)庫(kù)里也就是這種格式,但是此時(shí)如果直接按照上面的查詢方式來(lái)查詢的話,
直接用:sql="select * form tb where xingquaihao like '%" & 1 & "%' ” 將得到所有含1的,就算是21、13中的1,也會(huì)被查出來(lái)
將字段前后加上逗號(hào),變成“,1, 21, 13,”的時(shí)候,如果我們查21或者13,改成:sql="select * form tb where xingquaihao like '%," & 21 & ",%' ” 結(jié)果是什么都查不出來(lái)
為什么明明有值,卻查不出來(lái)呢?
因?yàn)樽詣?dòng)勾選,然后保存的字段中間有空格,比如“1, 21, 13”,1的后面是一個(gè)逗號(hào),逗號(hào)后面是一個(gè)空格,然后才是21
解決方法很簡(jiǎn)單了,在勾選完后,入庫(kù)前把空格去掉,
xingquaihao="1, 21, 13"
xingquaihao=replace(xingquaihao," ","") '將空格刪除
如此得到的就是緊湊型的值了,再按照上面的方法查詢,搞定!
相關(guān)文章
SqlServer 2005的排名函數(shù)使用小結(jié)
Sql Server 2005 引入了4個(gè)新的排名函數(shù):ROW_NUMBER、BANK、DENSE_RANK和NTILE。2010-04-04SQLServer2005 批量查詢自定義對(duì)象腳本
使用系統(tǒng)函數(shù)object_definition和系統(tǒng)表 sysobjects 就可以了2009-08-08mssql2005字符串連接方法 避免無(wú)效的連接錯(cuò)誤
用ASPXspy自帶的mssql連接字符串去連接數(shù)據(jù)庫(kù)總是出現(xiàn),DBNETLIB][ConnectionOpen (Invalid Instance()).]無(wú)效的連接2012-06-06sqlserver巧用row_number和partition by分組取top數(shù)據(jù)
SQL Server 2005后之后,引入了row_number()函數(shù),row_number()函數(shù)的分組排序功能使這種操作變得非常簡(jiǎn)單2011-12-12SQL Server Management Studio Express管理器 沒(méi)有導(dǎo)入導(dǎo)出數(shù)據(jù)的向?qū)У慕鉀Q方法
我的SQL2005 Microsoft SQL Server Management Studio Express管理器里,右鍵單擊一個(gè)數(shù)據(jù)庫(kù),指向“任務(wù)”,再單擊“導(dǎo)入數(shù)據(jù)”或“導(dǎo)出數(shù)據(jù)”中沒(méi)有這個(gè)選項(xiàng),要想實(shí)現(xiàn)導(dǎo)入/導(dǎo)出數(shù)據(jù),要怎么辦呢?2011-04-04同時(shí)安裝vs2005團(tuán)隊(duì)開(kāi)發(fā)版和sql 2005企業(yè)版的方法(downmoon原作)
由于微軟在vs2005 vsts團(tuán)隊(duì)開(kāi)發(fā)版中集成了sql 2005 express,而在SQL 2005中又集成了vs2005 Express,,所以當(dāng)很多用戶同時(shí)安裝vs2005團(tuán)隊(duì)開(kāi)發(fā)?:?sql 2005企業(yè)版(downmoon)時(shí),就會(huì)出現(xiàn)數(shù)據(jù)庫(kù)連接失敗的case2012-10-10SQL server 2005中設(shè)置自動(dòng)編號(hào)字段的方法
這篇文章主要介紹了SQL server 2005中設(shè)置自動(dòng)編號(hào)字段的方法 ,需要的朋友可以參考下2015-08-08