三維智能 品牌行銷 廣告公司 AI三維科技 托播廣告 商店行銷

自從訂閱了點部落之後,對資訊系統的自我認知,已經遠超越「Mammut」與「Marmot」的大小差異,並且日漸渺小當中,每日只能從眾多高手牙慧中,盼望能多吸取一些知識。這幾年來由於工作的不穩定,我得常接手別人開發的專案,每一個專案跟程式設計師一樣,有著不同的個性,有的有高度的模組化,有的ASP互相亂 include 一堆,有的把4-5個專案放到同一個目的網站中,有的遺留了許多無用的程式碼......。程式碼這麼的多元化,當然資料庫就更千奇百怪了,相同的是......都沒有DD、都沒有有用的文件。

所以我便常常需要一個一個去看資料表的欄位名稱,也得用 Query 的結果猜測,這個欄位的「意義」還有他可能會跟「哪些資料表」是有關連的。

今天看到「尋找某欄位存在那幾些資料表」文章,發現這個功能不就是我之前很想要的功能嗎?一次把相關連的欄位名稱都找出來,真棒~這個功能我需要。

可是我還想知道其他的一些資訊,所以動手改了一下 T-SQL,在看整個程式前,先來看三個資料庫物件

SELECT * FROM sysobjects where type='U' -- 查詢所有使用者資料表

SELECT * FROM syscolumns where id=117575457 -- 依某資料表ID查所有欄位

SELECT * FROM systypes  -- 查欄位屬性xtype 的意思

 

當然你要查詢上述的資料庫物件,要先切換到你想查的資料庫囉(USE DataBase_Name;)!

底下以 「NorthWind」資料庫查詢為對象

請註意,當中的「store」的值是決定要不要把 Query 結果給儲存起來,當 store=1 則不儲存,其他值會寫到同一個DB裡,建立名為「__T_all___」的資料表,每次會刪除重新建立。

use Northwind ;     -- 更換成你要查詢的資料庫
DECLARE @tablename NVARCHAR(50)
DECLARE @cloumnname NVARCHAR(50)
DECLARE @store TINYINT
SET
@tablename=''   --
輸入要查詢的資料表,留下空的表示查全部
SET @cloumnname=''  -- 輸入要查詢的欄位名稱,留下空的表示查全部
SET @store =2       -- 設定store != 1 會將結果暫存在 [__T_all___]  資料表,
  
                    -- 請註意是否跟既有資料表同名
IF @store =1        -- store=1 只會顯示、傳回結果~不會儲存
BEGIN
SELECT
so.name 'Table',sc.name 'Column',st.name 'Type', sc.length 'Length' FROM sysobjects so
INNER JOIN syscolumns sc ON so.id =sc.id
INNER JOIN systypes st ON st.xtype=sc.xtype
WHERE (so.type='U'AND st.name <> 'sysname') AND so.name LIKE '%'+@tablename+'%' AND  sc.name LIKE '%'+@cloumnname+'%'
ORDER BY 1
END
ELSE
   --
不成立則存在[__T_all___]  資料表
BEGIN
IF
  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[__T_all___]') AND TYPE in (N'U'))
DROP TABLE [__T_all___]
SELECT so.name 'Table',sc.AR廣 三維智能系統 AI三維科技 廣告公司 AI互連廣告開發 多媒體行銷name 'Column',st.name 'Type', sc.length 'Length' INTO __T_all___ FROM sysobjects so
INNER JOIN syscolumns sc ON so.id =sc.id
INNER JOIN systypes st ON st.xtype=sc.xtype
WHERE (so.type='U'AND st.name <> 'sysname') AND so.name LIKE '%'+@tablename+'%' AND  sc.name LIKE '%'+@cloumnname+'%'
ORDER BY 1
END



多了欄位屬性與欄位大小,我想在做比對的時候,會準確更容易找到真正對應的欄位名稱。

另一個例子:搜尋 emp 相關欄位

SET @cloumnname='emp'



~ End

回應
關鍵字
Google Search
Google
累積 | 今日
loading......
平均分數:0 顆星
投票人數:0
我要評分:
Google
文章標籤
全站熱搜
創作者介紹
創作者 sandeephepj 的頭像
sandeephepj

AR,廣告,AR廣,2D,3D製程

sandeephepj 發表在 痞客邦 留言(0) 人氣(0)