主页 > 知识库 > 数据库 > SQL server >

SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键

来源:网络 作者:Tyler Ning 发表于:2012-10-15 10:55  点击:
目需要将Access数据库中的数据导入到SQL Server中,需要检验导入后的数据完整性,数据值是否正确。我们使用的是Microsoft SQL Server 2008 Migration Assistant for Access这个工具,次工具专门用来将Access中的数据库导出到SQL Server中,我们的疑虑是这个导
目需要将Access数据库中的数据导入到SQL Server中,需要检验导入后的数据完整性,数据值是否正确。我们使用的是Microsoft SQL Server 2008 Migration Assistant for Access这个工具,次工具专门用来将Access中的数据库导出到SQL Server中,我们的疑虑是这个导出过程中会不会因为认为的原因导致数据错误或者数据之间的关联丢失,看起来有点多次一举,但是还是找方法来做测试。于 是就产生了今天的问题,怎么从SQL Server中找出所有的数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息。我找很多资料鼓捣出这个存储过程,先来看看代码:
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
代码  
        
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 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这两个系统视图的功能就能明白。来看看执行这个存储过程得到的结果:

下次介绍Microsoft SQL Server 2008 Migration Assistant for Access这个工具的用法。
           作者:Tyler Ning
           出处:http://www.cnblogs.com/tylerdonet/

    有帮助
    (0)
    0%
    没帮助
    (0)
    0%