基本无法找,列名都不知道,怎么匹配呢?要是有重复的数据怎么筛选呢?
如果实在是要找也行,但是需要时间很长
具体的 *** 作就是:
1、查询数据库表
2、循环根据表查询字段,并拼接sql
拼接sql类似于:
select from table
where column1 like '%数据%'
or column2 like '%数据%'
or column3 like '%数据%'
……
3、如果匹配成功,便将表名存入临时表或者表变量中(当然在此之前需要建立临时表或表变量)
4、完成循环后,读取临时表或者表变量,这就是你要找的表
5、如果要进一步筛选字段,则需要下一步动作,循环找到列名,也可以在表循环的时候嵌套循环处理,但是建议不要嵌套循环
字段的寻找和表的寻找类似
sql要写就太多,就不写啦
microsoft sql server management studio中展开对应表下面的列信息不就可以看到列的详细信息了么?当然这是可以的,但这里我们主要讲的时如何利用sql语句来查询指定表的列信息。
利用sql语句来查询列信息,就是要用到系统视图syscolumns,这个视图记录了数据库中所有表,视图,表值函数等的所有列信息。我们可以利用语句select from syscolumns来查看这个视图返回的信息。
syscolumns返回的列比较多,大部分情况下很多列的信息我们可能用不到,下面我们只解释一下比较常用的列的信息。
1,object_id--这个列是比较重要的,它是返回当前列所属表的ID。利用它,我们就可以查询指定表的所有列信息,比如下面的sql语句是查询表table1的所有列信息。
select from syscolumns where object_id=object_id('table1')
2,name--该列的列名。
3,column_id--该列在数据库中的ID,注意,数据库中任何对象的ID都是唯一的。
4,system_type_id--该列的类型的ID,和下面max_length,precision,scale三列一起可以来举个示例。
5,max_length--该列的最大长度
6,precisionp--如果这列是数值列,那么这是该列的精度,否则就是0
7,scale--如果这列是数值列,那么这就是列的小数位数,否则就是0
system_type_id,max_length,precision,scale四列结合系统视图systypes一起我们来举个示例。
如果我们要查询表table1的所有列,及列的类型,列的精度,列的小数位数,sql语句如下:
select aname,bname,amax_length,aprecision,ascale
from syscolumns a left join systypes b on auser_type_id=buser_type_id
where aobject_id=object_id('table1')
8,is_nullable--该列是否可以为null
9,is_identity--该列是否是标识列
10,is_computed--该列是否是计算列。利用该列,我们也就可以查询某个表的所有计算列了,比如我们要查询表table1中的所有计算列,sql语句如下:
select from syscolumns where object_id=object_id('table1') and is_computed=1
syscolumns视图中常用的列就是这10列了,其它列的信息大家可以到SQLServer 2005联机丛书中查询。
在jdbc执行一个sql语句的话,就会把sql语句对应的列都已元数据的形式提供给你,你可以根据元数据获取到列的信息
import javasqlConnection;
import javasqlDriverManager;
import javasqlPreparedStatement;
import javasqlResultSet;
import oraclejdbcdriverOracleResultSetMetaData;
public class DbTest {
public static void main(String[] args) {
Connection con = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try {
ClassforName("oraclejdbcdriverOracleDriver")newInstance();
String url="jdbc:oracle:thin:@ip:port:servID"; //数据库连接字符串
String user="user"; //用户名
String password="pswd"; //密码
con = DriverManagergetConnection(url,user,password); //获取连接
//这里的sql为一个查询结果为0条记录的sql,目的是只获取元数据信息
stmt = conprepareStatement("SELECT FROM TEST_TABLE WHERE 0 = 1");
rs = stmtexecuteQuery();
//下面的即为执行结果集的元数据,即使查询结果没有数据,该元数据还是存在
OracleResultSetMetaData rsmd = (OracleResultSetMetaData)rsgetMetaData();
int columnCnt = rsmdgetColumnCount(); //列的数量
for (int i = 1; i <= columnCnt; i++) {
//打印列名
Systemoutprintln(rsmdgetColumnName(i));
}
} catch (Exception e) {
//发生异常,执行异常处理
eprintStackTrace();
} finally {
if (rs != null) {
//关闭结果集
try {
rsclose();
} catch (Exception e) {
}
}
if (stmt != null) {
//关闭statement
try {
stmtclose();
} catch (Exception e) {
}
}
if (con != null) {
//关闭连接
try {
conclose();
} catch (Exception e) {
}
}
}
}
}
1、创建测试表,create table test_student(stu_id number, class_id number);
2、插入测试数据,
insert into test_student values(1,1001);
insert into test_student values(2,1001);
insert into test_student values(3,1002);
insert into test_student values(4,1003);
insert into test_student values(5,1003);
insert into test_student values(6,1003);
commit;
3、查询数据表中内容,select from test_student ;
4、将列名翻译为中文名进行展示,select stu_id as "学生编码", class_id as "课程编码" from test_student t;
select t,cCOMMENTS from user_tab_columns t,user_col_comments c
where ttable_name='EMP'
--isnull函数:需要个参数,如果第一个参数为空,则赋值第二个参数。
SELECT
--空格代表as关键字
( CASE WHEN acolorder = 1 THEN dname
ELSE ''
END ) 表名 ,
acolorder 字段序号 ,
aname 字段名 ,
( CASE WHEN COLUMNPROPERTY(aid, aname, 'IsIdentity') = 1 THEN '√'
ELSE ''
END ) 标识 ,
( CASE WHEN ( SELECT COUNT()
FROM sysobjects
WHERE ( name IN (
SELECT name
FROM sysindexes
WHERE ( id = aid )
AND ( indid IN (
SELECT indid
FROM sysindexkeys
WHERE ( id = aid )
AND ( colid IN (
SELECT
colid
FROM
syscolumns
WHERE
( id = aid )
AND ( name = aname ) ) ) ) ) ) )
AND ( xtype = 'PK' )
) > 0 THEN 'true'
ELSE 'false'
END ) 主键 ,
bname 类型 ,
alength 占用字节数 ,
COLUMNPROPERTY(aid, aname, 'PRECISION') AS 长度 ,
ISNULL(COLUMNPROPERTY(aid, aname, 'Scale'), 0) AS 小数位数 ,
( CASE WHEN aisnullable = 1 THEN 'true'
ELSE 'false'
END ) 允许空 ,
ISNULL(etext, '') 默认值 ,
ISNULL(g[value], '') AS 字段说明
--a代表列集合表:为每个表和视图中的每列返回一行,并为数据库中的存储过程的每个参数返回一行
--b代表列类型表:为数据库中定义的每种系统提供的数据类型和每种用户定义的数据类型返回一行。
FROM syscolumns a
LEFT JOIN systypes b ON axtype = bxusertype
--d代表对象表:在数据库中创建的每个对象(例如约束、默认值、日志、规则以及存储过程)都对应一行
INNER JOIN sysobjects d ON aid = did
AND dxtype = 'U'
AND dname <> 'dtproperties'
--e代表etext是默认值:包含数据库中每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的项
LEFT JOIN syscomments e ON acdefault = eid
--g代表g[value]是字段说明:针对当前数据库中的每个扩展属性返回一行。
LEFT JOIN sysextended_properties g ON aid = gmajor_id
AND acolid = gmajor_id
ORDER BY aid ,
acolorder
这个方法可以获取当前库存中所有表的所有列。希望对你有用。
以上就是关于SQL如何查找一条数据的表名全部的内容,包括:SQL如何查找一条数据的表名、如何在sqlserver中获取表的所有列信息、怎么样用获取数据表的列名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)