SQL點滴之篩選數(shù)據(jù)列的信息
前面兩次點滴分享中,筆者與我們分享了SET QUOTED_IDENTIFIER 的作用,并給我們介紹了一個簡單的字符串分割函數(shù)。這一次,筆者為我們介紹怎么從SQL Server中找出所有的數(shù)據(jù)列的類型,字段大小,是否可為空,是否是主鍵,約束等等信息。
項目需要將Access數(shù)據(jù)庫中的數(shù)據(jù)導入到SQL Server中,需要檢驗導入后的數(shù)據(jù)完整性,數(shù)據(jù)值是否正確。我們使用的是Microsoft SQL Server 2008 Migration Assistant for Access這個工具,次工具專門用來將Access中的數(shù)據(jù)庫導出到SQL Server中,我們的疑慮是這個導出過程中會不會因為認為的原因?qū)е聰?shù)據(jù)錯誤或者數(shù)據(jù)之間的關(guān)聯(lián)丟失,看起來有點多次一舉,但是還是找方法來做測試。于是就產(chǎn)生了今天的問題,怎么從SQL Server中找出所有的數(shù)據(jù)列的類型,字段大小,是否可為空,是否是主鍵,約束等等信息。我找很多資料鼓搗出這個存儲過程,先來看看代碼:
- USE [MIS]
- GO
- /****** Object: StoredProcedure [dbo].[sp_SelectColumnInfor] Script Date: 09/23/2010 19:00:28 ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- create procedure [dbo].[sp_SelectColumnInfor]
- as
- declare @table_name varchar(250)
- --create a temp table
- create table #tempTable(
- TABLE_NAME nvarchar(128),
- COLUMN_NAME nvarchar(128),
- IS_NULLABLE varchar(3),
- DATA_TYPE nvarchar(128),
- CHARACTER_MAXIMUM_LENGTH int,
- CONSTRAINT_NAME nvarchar(128),
- )
- --create a cursor
- declare curTABLE cursor for
- select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'
- for read only
- open curTABLE
- fetch next from curTABLE into @table_name
- while @@FETCH_STATUS =0
- begin
- insert into #tempTable
- select sc.[TABLE_NAME],sc.[COLUMN_NAME],sc.[IS_NULLABLE],sc.[DATA_TYPE],sc.[CHARACTER_MAXIMUM_LENGTH]
- ,scc.CONSTRAINT_NAME
- from INFORMATION_SCHEMA.COLUMNS sc
- left join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE scc on sc.COLUMN_NAME=scc.COLUMN_NAME and sc.TABLE_NAME=scc.TABLE_NAME
- where sc.[TABLE_NAME]=@table_name --order by TABLE_NAME,COLUMN_NAME
- fetch next from curTABLE into @table_name
- end
- close curTABLE
- deallocate curTABLE
- select * from #tempTable order by TABLE_NAME,COLUMN_NAME
- drop table #tempTable
- GO
其實很簡單的,只要查查INFORMATION_SCHEMA.COLUMNS , INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE這兩個系統(tǒng)視圖的功能就能明白。來看看執(zhí)行這個存儲過程得到的結(jié)果:
下次介紹Microsoft SQL Server 2008 Migration Assistant for Access這個工具的用法。
原文鏈接:http://www.cnblogs.com/tylerdonet/archive/2010/09/23/1833381.html
【編輯推薦】
- SQL點滴之SET QUOTED_IDENTIFIER OFF語句的作用
- SQL點滴之一個簡單的字符串分割函數(shù)
- 微博 請問你是怎么優(yōu)化數(shù)據(jù)庫的?
- MySQL數(shù)據(jù)庫的優(yōu)化(上)單機MySQL數(shù)據(jù)庫的優(yōu)化
- MySQL數(shù)據(jù)庫的優(yōu)化(下)MySQL數(shù)據(jù)庫的高可用架構(gòu)方案