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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 项目需要将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中找出所有的数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息。我找很多资料鼓捣出这个存储过程,先来看看代码:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
 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这两个系统视图的功能就能明白。来看看执行这个存储过程得到的结果:

img_f5a6fab3649614438739ba857cb4fca1.png

下次介绍Microsoft SQL Server 2008 Migration Assistant for Access这个工具的用法。

作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。

目录
相关文章
|
8天前
|
SQL 存储 数据挖掘
使用Python和PDFPlumber进行简历筛选:以SQL技能为例
本文介绍了一种使用Python和`pdfplumber`库自动筛选简历的方法,特别是针对包含“SQL”技能的简历。通过环境准备、代码解析等步骤,实现从指定文件夹中筛选出含有“SQL”关键词的简历,并将其移动到新的文件夹中,提高招聘效率。
26 8
使用Python和PDFPlumber进行简历筛选:以SQL技能为例
|
2月前
|
SQL 存储 数据库
SQL部分字段编码设置技巧与方法
在SQL数据库管理中,设置字段的编码对于确保数据的正确存储和检索至关重要
|
2月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
46 10
|
2月前
|
SQL 存储 Serverless
SQL语句拆分时间字段的技巧与方法
在数据库操作中,经常需要处理时间数据
|
2月前
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
1月前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
32 0
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
5月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
129 13
|
5月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
5月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
67 6