sqlserver查找所有包含标示列的表

jingkunliu 2013-05-21 10:58:58
在数据库中有很多表,其中有些表设置了标示列,请问怎样的语句才可以将这些表名称查询出来,如果可以的话能否查询出所有包含标示列的表以及其字段呢?
请大神帮帮忙,我的水平也就谢谢简单查询更新语句,请大神写的时候尽量给点注释
...全文
290 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
daiyueqiang2045 2013-05-21
  • 打赏
  • 举报
回复
引用 8 楼 liujingkun123 的回复:
[quote=引用 5 楼 daiyueqiang 的回复:]
lz 为什么不备份数据进行还原呢?


因为牵扯到部分空间数据,设置比较繁琐,一般都是设计好了之后将表倒过去的,不过这种方式也可以试试,我没试过,谢谢了[/quote]
你可以直接导出数据到另外一个数据库中,并且生成一个ssis包,之后的话直接执行这个ssis包就可以

jingkunliu 2013-05-21
  • 打赏
  • 举报
回复
引用 5 楼 daiyueqiang 的回复:
lz 为什么不备份数据进行还原呢?
因为牵扯到部分空间数据,设置比较繁琐,一般都是设计好了之后将表倒过去的,不过这种方式也可以试试,我没试过,谢谢了
jingkunliu 2013-05-21
  • 打赏
  • 举报
回复
引用 6 楼 OrchidCat 的回复:
[quote=引用 4 楼 liujingkun123 的回复:] [quote=引用 1 楼 OrchidCat 的回复:]
			SELECT
			[表名]=CASE WHEN T.column_id = 1 THEN OBJECT_NAME(T.object_id) ELSE '' END ,
			[字段编号]=T.column_id,
			[字段名]=T.name,
			[主键]=case when exists(SELECT 1 FROM sys.key_constraints  where type='PK' and object_id=T.OBJECT_ID) THEN '●' ELSE '' END,
			[标识列]=CASE T.is_identity  WHEN 1 THEN '●' ELSE '' END,
			[计算列]=CASE T.is_computed WHEN 1 THEN '●' ELSE '' END,
			[字段类型]=(SELECT name FROM sys.types WHERE user_type_id = T.user_type_id),
			[字段长度]= T.PRECISION,
			[小数位] = T.Scale,
			[允许空] = CASE T.is_nullable  WHEN 1 THEN '●' ELSE '' END,
			[默认值]= ISNULL((SELECT definition from sys.default_constraints where object_id = T.default_object_id),''),
			[字段说明]=(SELECT VALUE FROM sys.extended_properties WHERE major_id = T.OBJECT_ID AND minor_id  =T.column_id)
			FROM sys.COLUMNS T
			INNER JOIN sys.objects O ON T.object_id = O.object_id AND O.type = 'U'
			WHERE RIGHT(OBJECT_NAME(T.object_id),3) <> 'Log' AND OBJECT_NAME(T.object_id) <>'AuditDDLEvents' AND OBJECT_NAME(T.object_id) <>'dtproperties'
			ORDER BY OBJECT_NAME(T.object_id),T.column_id
谢谢您,这个很详细,不过包括了所有的表和字段,有些是不可用的,那我想利用这个查询结果,是否可以更新到新配置的数据库中呢,因为刚配置的数据库数据导入后标识列默认都是没有的[/quote] 把不需要的表排除掉,导出表结构(生成脚本)即可。 数据库(右键)—— 任务—— 生成脚本 —— 选择特定数据库对象——表(勾选)——生成即可。[/quote] 那这样数据呢,这样数据无法拷贝吧
Mr_Nice 2013-05-21
  • 打赏
  • 举报
回复
引用 4 楼 liujingkun123 的回复:
[quote=引用 1 楼 OrchidCat 的回复:]
			SELECT
			[表名]=CASE WHEN T.column_id = 1 THEN OBJECT_NAME(T.object_id) ELSE '' END ,
			[字段编号]=T.column_id,
			[字段名]=T.name,
			[主键]=case when exists(SELECT 1 FROM sys.key_constraints  where type='PK' and object_id=T.OBJECT_ID) THEN '●' ELSE '' END,
			[标识列]=CASE T.is_identity  WHEN 1 THEN '●' ELSE '' END,
			[计算列]=CASE T.is_computed WHEN 1 THEN '●' ELSE '' END,
			[字段类型]=(SELECT name FROM sys.types WHERE user_type_id = T.user_type_id),
			[字段长度]= T.PRECISION,
			[小数位] = T.Scale,
			[允许空] = CASE T.is_nullable  WHEN 1 THEN '●' ELSE '' END,
			[默认值]= ISNULL((SELECT definition from sys.default_constraints where object_id = T.default_object_id),''),
			[字段说明]=(SELECT VALUE FROM sys.extended_properties WHERE major_id = T.OBJECT_ID AND minor_id  =T.column_id)
			FROM sys.COLUMNS T
			INNER JOIN sys.objects O ON T.object_id = O.object_id AND O.type = 'U'
			WHERE RIGHT(OBJECT_NAME(T.object_id),3) <> 'Log' AND OBJECT_NAME(T.object_id) <>'AuditDDLEvents' AND OBJECT_NAME(T.object_id) <>'dtproperties'
			ORDER BY OBJECT_NAME(T.object_id),T.column_id
谢谢您,这个很详细,不过包括了所有的表和字段,有些是不可用的,那我想利用这个查询结果,是否可以更新到新配置的数据库中呢,因为刚配置的数据库数据导入后标识列默认都是没有的[/quote] 把不需要的表排除掉,导出表结构(生成脚本)即可。 数据库(右键)—— 任务—— 生成脚本 —— 选择特定数据库对象——表(勾选)——生成即可。
daiyueqiang2045 2013-05-21
  • 打赏
  • 举报
回复
lz 为什么不备份数据进行还原呢?
jingkunliu 2013-05-21
  • 打赏
  • 举报
回复
引用 1 楼 OrchidCat 的回复:
			SELECT
			[表名]=CASE WHEN T.column_id = 1 THEN OBJECT_NAME(T.object_id) ELSE '' END ,
			[字段编号]=T.column_id,
			[字段名]=T.name,
			[主键]=case when exists(SELECT 1 FROM sys.key_constraints  where type='PK' and object_id=T.OBJECT_ID) THEN '●' ELSE '' END,
			[标识列]=CASE T.is_identity  WHEN 1 THEN '●' ELSE '' END,
			[计算列]=CASE T.is_computed WHEN 1 THEN '●' ELSE '' END,
			[字段类型]=(SELECT name FROM sys.types WHERE user_type_id = T.user_type_id),
			[字段长度]= T.PRECISION,
			[小数位] = T.Scale,
			[允许空] = CASE T.is_nullable  WHEN 1 THEN '●' ELSE '' END,
			[默认值]= ISNULL((SELECT definition from sys.default_constraints where object_id = T.default_object_id),''),
			[字段说明]=(SELECT VALUE FROM sys.extended_properties WHERE major_id = T.OBJECT_ID AND minor_id  =T.column_id)
			FROM sys.COLUMNS T
			INNER JOIN sys.objects O ON T.object_id = O.object_id AND O.type = 'U'
			WHERE RIGHT(OBJECT_NAME(T.object_id),3) <> 'Log' AND OBJECT_NAME(T.object_id) <>'AuditDDLEvents' AND OBJECT_NAME(T.object_id) <>'dtproperties'
			ORDER BY OBJECT_NAME(T.object_id),T.column_id
谢谢您,这个很详细,不过包括了所有的表和字段,有些是不可用的,那我想利用这个查询结果,是否可以更新到新配置的数据库中呢,因为刚配置的数据库数据导入后标识列默认都是没有的
jingkunliu 2013-05-21
  • 打赏
  • 举报
回复
引用 2 楼 ZaoLianBuXiQi 的回复:

--百度应有尽有,刚学到的
SELECT

表名=case when a.colorder=1 then d.name else '' end,

字段序号=a.colorder,

字段名=a.name,

标识=case when COLUMNPROPERTY(a.id,a.name,'IsIdentity')=1 then '√'else '' end,

主键=case when exists

(

     SELECT 1 FROM sysobjects where xtype='PK' and name in

     (

         SELECT name FROM sysindexes WHERE indid in

         (   

              SELECT   indid   FROM   sysindexkeys   WHERE   id   =   a.id   AND   colid=a.colid

         )

     )

)

then '√' else '' end,

类型=b.name,

占用字节数=a.length,

长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),

小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),

允许空=case when a.isnullable=1 then '√' else '' end,

默认值=isnull(e.text,''),

字段说明=isnull(g.[value],'')/*此列在绑定GridView时,如选择动态生成列,始终无法绑定.手动指定列后正常,原因不详*/

FROM syscolumns a

left join systypes b on a.xtype=b.xusertype

inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'

left join syscomments e on a.cdefault=e.id
left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id

where COLUMNPROPERTY(a.id,a.name,'IsIdentity')=1
谢谢您,这个很详细,那我想利用这个查询结果,是否可以更新到新配置的数据库中呢,因为刚配置的数据库数据导入后标识列默认都是没有的
MrYangkang 2013-05-21
  • 打赏
  • 举报
回复

--百度应有尽有,刚学到的
SELECT

表名=case when a.colorder=1 then d.name else '' end,

字段序号=a.colorder,

字段名=a.name,

标识=case when COLUMNPROPERTY(a.id,a.name,'IsIdentity')=1 then '√'else '' end,

主键=case when exists

(

     SELECT 1 FROM sysobjects where xtype='PK' and name in

     (

         SELECT name FROM sysindexes WHERE indid in

         (   

              SELECT   indid   FROM   sysindexkeys   WHERE   id   =   a.id   AND   colid=a.colid

         )

     )

)

then '√' else '' end,

类型=b.name,

占用字节数=a.length,

长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),

小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),

允许空=case when a.isnullable=1 then '√' else '' end,

默认值=isnull(e.text,''),

字段说明=isnull(g.[value],'')/*此列在绑定GridView时,如选择动态生成列,始终无法绑定.手动指定列后正常,原因不详*/

FROM syscolumns a

left join systypes b on a.xtype=b.xusertype

inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'

left join syscomments e on a.cdefault=e.id
left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id

where COLUMNPROPERTY(a.id,a.name,'IsIdentity')=1
Mr_Nice 2013-05-21
  • 打赏
  • 举报
回复
			SELECT
			[表名]=CASE WHEN T.column_id = 1 THEN OBJECT_NAME(T.object_id) ELSE '' END ,
			[字段编号]=T.column_id,
			[字段名]=T.name,
			[主键]=case when exists(SELECT 1 FROM sys.key_constraints  where type='PK' and object_id=T.OBJECT_ID) THEN '●' ELSE '' END,
			[标识列]=CASE T.is_identity  WHEN 1 THEN '●' ELSE '' END,
			[计算列]=CASE T.is_computed WHEN 1 THEN '●' ELSE '' END,
			[字段类型]=(SELECT name FROM sys.types WHERE user_type_id = T.user_type_id),
			[字段长度]= T.PRECISION,
			[小数位] = T.Scale,
			[允许空] = CASE T.is_nullable  WHEN 1 THEN '●' ELSE '' END,
			[默认值]= ISNULL((SELECT definition from sys.default_constraints where object_id = T.default_object_id),''),
			[字段说明]=(SELECT VALUE FROM sys.extended_properties WHERE major_id = T.OBJECT_ID AND minor_id  =T.column_id)
			FROM sys.COLUMNS T
			INNER JOIN sys.objects O ON T.object_id = O.object_id AND O.type = 'U'
			WHERE RIGHT(OBJECT_NAME(T.object_id),3) <> 'Log' AND OBJECT_NAME(T.object_id) <>'AuditDDLEvents' AND OBJECT_NAME(T.object_id) <>'dtproperties'
			ORDER BY OBJECT_NAME(T.object_id),T.column_id
jingkunliu 2013-05-21
  • 打赏
  • 举报
回复
引用 9 楼 daiyueqiang 的回复:
[quote=引用 8 楼 liujingkun123 的回复:] [quote=引用 5 楼 daiyueqiang 的回复:] lz 为什么不备份数据进行还原呢?
因为牵扯到部分空间数据,设置比较繁琐,一般都是设计好了之后将表倒过去的,不过这种方式也可以试试,我没试过,谢谢了[/quote] 你可以直接导出数据到另外一个数据库中,并且生成一个ssis包,之后的话直接执行这个ssis包就可以 [/quote] 刚试了一下,不行的,我的空间数据导入后都成了一般的表类型,这样就没法子用了
本课程根据讲师十多年在世界500强外企的生产环境中的SQL Serer数据库管理和项目实施经验倾心打造。课程系统性强,知识体系完整,覆盖90%以上的企业环境下SQL Server高可用场景,课程中不仅演示详细的操作步骤,更加突出最常见的故障和问题,让学员少走“弯路”,不只是让学员学会“操作”更能让学员“操作”的规范,满满的干货分享,一些课程资料(架构图、部署规划格等)不仅可以帮助学员掌握技能,也可以作为学员在企业生产环境中实施SQL Server高可用的配置文档、操作手册等。课程的实验环境介绍:1)全部基于微软域环境和企业版SQL Server AOAG - 95%以上的企业环境都是在域环境中,不介绍非域环境和标准版的SQL Server高可用性组,这的配置在企业中较罕见,没有实践意义,不浪费学员时间。2)相应域环境已提前部署和配置好 - 学员导入虚拟机即可开始实验,无需从零开始搭建域环境,所有实验中SQL Server均已加域,直入主题,节省大量时间。3)最新的Windows Server故障转移集群(WS2016、WS2019)和最新版本的SQL Server(SQL2017、SQL2019) -  WS2016-SQL2017与WS2019-SQL2019是目前大多数企业SQL Server高可用的主要平台,基于微软产品生命周期现在一些企业也在讲早期的AOAG向这两个版本迁移,掌握这两种组合不仅让学员学会,更能学有所用。本课程为后续SQL Server进阶课程铺垫,是通向SQL Server DBA 专家的必经之路,讲师每周答疑两次。所有课程资料包括:课程PPT、架构图、部署规划格、各类脚本学员均可下载。     

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧