項(xiàng)目需要將access數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到SQL Server中,需要檢驗(yàn)導(dǎo)入后的數(shù)據(jù)完整性,數(shù)據(jù)值是否正確。我們使用的是Microsoft SQL Server 2008 Migration Assistant for Access這個(gè)工具,次工具專門用來將Access中的數(shù)據(jù)庫導(dǎo)出到SQL Server中,我們的疑慮是這個(gè)導(dǎo)出過程中會(huì)不會(huì)因?yàn)檎J(rèn)為的原因?qū)е聰?shù)據(jù)錯(cuò)誤或者數(shù)據(jù)之間的關(guān)聯(lián)丟失,看起來有點(diǎn)多次一舉,但是還是找方法來做測(cè)試。于是就產(chǎn)生了今天的問題,怎么從SQL Server中找出所有的數(shù)據(jù)列的類型,字段大小,是否可為空,是否是主鍵,約束等等信息。我找很多資料鼓搗出這個(gè)存儲(chǔ)過程,先來看看代碼:
代碼
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
44 select * from #tempTable order by TABLE_NAME,COLUMN_NAME
45 drop table #tempTable
46 GO
其實(shí)很簡單的,只要查查INFORMATION_SCHEMA.COLUMNS , INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE這兩個(gè)系統(tǒng)視圖的功能就能明白。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注