SQL點滴之篩選資料列的資訊

來源:互聯網
上載者:User

前面兩次點滴分享中,筆者與我們分享了SET QUOTED_IDENTIFIER 的作用,並給我們介紹了一個簡單的字串分割函數。這一次,筆者為我們介紹怎麼從SQL Server中找出所有的資料列的類型,欄位大小,是否可為空白,是否是主鍵,約束等等資訊。

項目需要將Access資料庫中的資料匯入到SQL Server中,需要檢驗匯入後的資料完整性,資料值是否正確。我們使用的是Microsoft SQL Server 2008 Migration Assistant for Access這個工具,次工具專門用來將Access中的資料庫匯出到SQL Server中,我們的疑慮是這個匯出過程中會不會因為認為的原因導致資料錯誤或者資料之間的關聯丟失,看起來有點多次一舉,但是還是找方法來做測試。於是就產生了今天的問題,怎麼從SQL Server中找出所有的資料列的類型,欄位大小,是否可為空白,是否是主鍵,約束等等資訊。我找很多資料鼓搗出這個預存程序,先來看看代碼:

 
  1. USE [MIS]  
  2. GO  
  3.  
  4. /****** Object:  StoredProcedure [dbo].[sp_SelectColumnInfor]    Script Date: 09/23/2010 19:00:28 ******/  
  5. SET ANSI_NULLS ON 
  6. GO  
  7.  
  8. SET QUOTED_IDENTIFIER ON 
  9. GO  
  10.  
  11. create procedure [dbo].[sp_SelectColumnInfor]  
  12. as 
  13. declare @table_name varchar(250)  
  14. --create a temp table  
  15. create table #tempTable(  
  16. TABLE_NAME nvarchar(128),  
  17. COLUMN_NAME nvarchar(128),  
  18. IS_NULLABLE varchar(3),  
  19. DATA_TYPE nvarchar(128),  
  20. CHARACTER_MAXIMUM_LENGTH int,  
  21. CONSTRAINT_NAME nvarchar(128),  
  22. )   
  23. --create a cursor  
  24. declare curTABLE cursor for 
  25. select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE' 
  26. for read only 
  27.  
  28. open curTABLE  
  29. fetch next from curTABLE into @table_name  
  30. while @@FETCH_STATUS =0  
  31. begin 
  32. insert into #tempTable  
  33. select sc.[TABLE_NAME],sc.[COLUMN_NAME],sc.[IS_NULLABLE],sc.[DATA_TYPE],sc.[CHARACTER_MAXIMUM_LENGTH]  
  34. ,scc.CONSTRAINT_NAME  
  35. from INFORMATION_SCHEMA.COLUMNS sc   
  36. left join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE scc on sc.COLUMN_NAME=scc.COLUMN_NAME and sc.TABLE_NAME=scc.TABLE_NAME  
  37. where sc.[TABLE_NAME]=@table_name --order by TABLE_NAME,COLUMN_NAME  
  38.  
  39. fetch next from curTABLE into @table_name  
  40. end 
  41. close curTABLE  
  42. deallocate curTABLE  
  43. select * from #tempTable order by TABLE_NAME,COLUMN_NAME  
  44. drop table #tempTable  
  45. GO 


其實很簡單的,只要查查INFORMATION_SCHEMA.COLUMNS , INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE這兩個系統檢視表的功能就能明白。來看看執行這個預存程序得到的結果:

 

下次介紹Microsoft SQL Server 2008 Migration Assistant for Access這個工具的用法。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.