Sybase
搜尋 Sybase 數據庫中每個表中的每一列
我的任務是創建一個從我們的 Micros 銷售點系統中提取數據的應用程序。POS 使用在我們其中一台伺服器上執行的 Sybase 數據庫。數據庫模式非常複雜。我已經能夠找出大部分模式來訪問我需要的數據,但是,還有一些東西需要找到。我知道它們在實際 POS 中的名稱,但我似乎無法在數據庫中的任何地方找到它們(儘管我實際上並沒有查看所有 200 多個表)。
我想知道是否有任何方法可以執行查詢以在所有表的所有列中搜尋特定字元串。順便說一句,我正在使用 Sybase 數據庫客戶端軟體附帶的“Interactive SQL”應用程序連接到數據庫。
我最近被要求做類似的任務。這在 SybaseASE 中尤其不容易。
選項1 :
您可以編寫自定義工具以 BCP 輸出文件中的數據,然後 grep 這些文件以搜尋您要查找的特定文本。您也可以使用 PERL 正則表達式或使用本機 Unix/Linux 命令來解析這些文件並找到您想要查找的所需文本。
選項 2:
另一個對我有用的選項(使用 TSQL 不是那麼好——快速而骯髒的方式)。
注意:這將需要很長時間(緩慢且未優化),具體取決於您的數據庫大小、硬體、伺服器上執行的工作負載以及數據庫佈局。
測試,測試並在手前測試!
--- run below script and copy the output and run it in another query window. set nocount on declare @searchvalue varchar(255) select @searchvalue = 'test string to search'---- replace this .. !! print 'set nocount on' print 'go' print 'create table #results (table_name sysname, column_name sysname)' print 'go" select 'insert #results select distinct ''' + object_name(c.id) + ''' as table_name, ''' + c.name + ''' as column_name from ' + object_name(c.id) + ' where ' + c.name + ' LIKE ''%' + @searchvalue + '%''' + char(10) from syscolumns c, sysobjects o where c.usertype in ( -- only look for char, varchar, text etc datatypes as we are not interested in int, datetime etc.... 1 ,2 ,18 ,19 ,24 ,25 ,42 ) and o.type ='U' -- only user tables we are interested in and c.id = o.id and c.length>=datalength(@searchvalue ) --and object_name(c.id) = 'some table if you want to filter' print 'select * from #results' print 'go" go
你可以做這樣的查詢:
Select o.name as table, c.name as column from syscolumns c, sysobjects o Where c.id = o.id and c.name like "stringImLookingFor"
第一個名稱是表名,第二個名稱是列名。如果您不知道要查找的確切名稱,可以使用 ‘%’ 作為萬用字元。