項目需要將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
44 select * from #tempTable order by TABLE_NAME,COLUMN_NAME
45 drop table #tempTable
46 GO
其實很簡單的,只要查查INFORMATION_SCHEMA.COLUMNS , INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE這兩個系統視圖的功能就能明白。
新聞熱點
疑難解答