您的位置:首页 > 数据库

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

2014-12-03 16:34 441 查看
原文:SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息项目需要将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

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这个工具的用法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐