SQL点滴3—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息

王朝学院·作者佚名  2011-05-16
窄屏简体版  字體: 小  |  中  |  大  |  超大  

项目需要将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这两个系统视图的功能就能明白。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航