如何自動處理軟件測試開發技術SQL Server 2005表格數據 SQL Server 數據庫
關鍵字:SQL Server 2005表格數據近我的一個朋友也是同事面臨一個有趣的問題,他每個月從客戶那里收到大量的數據,這些數據必須先經過處理才能使用,數據表包含成千上萬行,并且表結構可能每個月都不相同。更糟糕的是,大量的數據包含重要的或無用的空格或者兩者都有。
在我的朋友第一次用手工做完這項工作后,他很快發現手工處理實在是一件令人厭煩的事情。他在想是否存在一個自動處理數據的方法,問題是他不能預先知道表格有多少列或者每列的列名。幸運的是,自動處理數據表數據是有可能的。
在SQL Server 2005的INFORMATION_SCHEMA模式中有大量的有用的系統視圖,本文感興趣的視圖是INFORMATION_SCHAMA.COLUMNS。
所有的系統視圖在你查看時都是隱藏的,所以你不能簡單地右擊然后到查詢窗體查看腳本。微軟是故意這樣做的,以防止對內部結構的改變。如果你對系統表有所了解,你可以猜測這些視圖是如何構建的,但是,在本文中內部結構對我們并不重要。
然而,你可以獲得大量關于表格中每一列的信息,下面是一些有趣的信息:
Table_Catalog:數據庫名
Table_Schema:模式
Table_Name:表名
Column_Name:列名
Ordinal_Position:列數
Column_Default:默認值
Is_Nullable:有無數據
Data_Type:指明該列的數據類型
查詢任何給定表的列數,你可以用類似以下代碼:
USE AdventureWorksSELECT*FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME =’ProductDescription’
在你的數據庫中試用這個查詢命令,替換它的名稱和感興趣的數據表。運行它查看輸出結果。
現在,我將用SQL產生UPDATE語句用來處理數據表中的所有數據。我通過收集感興趣的數據表中每一列的文字描述來實現。我將忽略和我們的需要不相關的數據類型,而集中于char和varchar這兩種類型,請參考列表A。這個命令的輸出是一系列和出現在列表B中的類似UPDATE語句,你需要做的就是收集這個輸出然后作為一個查詢運行語句塊。
在上面的例子中,我只對一個數據表進行處理,但是如果我想在一個模式中處理所有數據表,我只要簡單的改一下WHERE條件語句的table_name用Schema_Name來代替,請看列表C。查看命令的輸出結果請看列表D。
這揭示了一個小問題,當用命名模式表示時要包含一個視圖,這使得當已經更新了視圖所關聯的數據表后,在試圖更新視圖變得毫無意義。所以我需要找一種方法略過視圖。但是僅僅查看INFORMATION_SCHEMA.COLUMS視圖,并沒有方法避免這個問題,因為該視圖不能從不同的數據表區分開來。
另一個視圖INFORMATION_SCHEMA.Tables可以幫助我們解決上述問題。我只需要在上面的查詢中添加存在量詞,請看列表E,這個版本的查詢從列表中去除了視圖來進行處理。
我的同事現在很高興,因為這一解決方法很簡單并且靈活好用。只要改變where條件語句,就可以對一個表或所有表用一個模式,甚至可以用于數據庫中的所有表。
正如你看到的,SQL Server2005使得處理數據表和列信息比在SQL Server 2000中更簡單,我還演示了用SQL如何產生SQL代碼?,F在你知道如何將一件繁重的任務變成輕而易舉的小事了。
原文轉自:http://www.anti-gravitydesign.com