SQL 通过syscolumns.xtype动态查找指定数据类型字段所包含的数据

Posted 山治先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 通过syscolumns.xtype动态查找指定数据类型字段所包含的数据相关的知识,希望对你有一定的参考价值。

表中太多列,只想查找某些比如,数据类型为varchar的字段的数据。

  思路:1、先获取列名:

select * from syscolumns 
where id=(select max(id) from sysobjects where xtype=\'u\' and name=\'test_A\')

  

  2、查找指定数据类型,xtype就是数据类型,参考如下

syscolumns表内的xtype

  查了一下,这些东西都是存于每一个数据库的syscolumns表里面得,name就是列名,xtype就是数据类型,但是这个xtype是数字的,下面是数字和数据类型对应的关系;

 xtype=34 \'image\' 
 xtype= 35 \'text\' 
 xtype=36 \'uniqueidentifier\' 
 xtype=48 \'tinyint\' 
 xtype=52 \'smallint\' 
 xtype=56 \'int\' 
 xtype=58 \'smalldatetime\' 
 xtype=59 \'real\' 
 xtype=60 \'money\' 
 xtype=61 \'datetime\' 
 xtype=62 \'float\' 
 xtype=98 \'sql_variant\' 
 xtype=99 \'ntext\' 
 xtype=104 \'bit\' 
 xtype=106 \'decimal\' 
 xtype=108 \'numeric\' 
 xtype=122 \'smallmoney\' 
 xtype=127 \'bigint\' 
 xtype=165 \'varbinary\' 
 xtype=167 \'varchar\'

 xtype=173 \'binary\' 
 xtype=175 \'char\' 
 xtype=189 \'timestamp\' 
 xtype=231 \'nvarchar\'

 xtype=239 \'nchar\' 
 xtype=241 \'xml\' 
 xtype=231 \'sysname\'

3、构造最终的动态SQL语句:

DECLARE @sql VARCHAR(max)
DECLARE @col VARCHAR(1000)

SELECT @col = STUFF((SELECT \',\'+name FROM syscolumns where id=(select max(id) from sysobjects where xtype=\'u\' and name=\'test_A\')
AND sys.syscolumns.xtype= 167 for xml path(\'\')),1,1,\'\')

SET @sql=\'select \'+@col
SET @sql=@sql+\' from test_A\'
EXEC(@sql)

 

以上是关于SQL 通过syscolumns.xtype动态查找指定数据类型字段所包含的数据的主要内容,如果未能解决你的问题,请参考以下文章

mybatis动态sql使用以及增删改查的知识点

Jdbc多数据源动态切换项目

Java Web009 -- MyBatis(入门 & 增删改查 & 动态SQL)

mybatis 动态SQL

mybatis逆向工程之动态web项目

My Eclipse和SQL Server如何实现增、删、改、查、登录和注册