实际开发中经常用到select * from table,往往需要知道具体的字段,这个时候再去数据库中翻或者查看数据字典比较麻烦。为了方便,自己特意写了一个小函数f_selectall,针对SqlServer、Oracle和PostgreSQL数据库分别写了。

核心思想:先查出每张表的列名字段,然后合并列。

一、SqlServer版本:

create function f_selectall
(
@ptablename VARCHAR(50),----表名 如SA_WL_LYTZ
@split VARCHAR(50) -----别名,如a
)
RETURNS VARCHAR(3000)
as
BEGIN
declare @split1 VARCHAR(50);
declare @split2 VARCHAR(50);
declare @sreturn VARCHAR(3000); if(@split is null)
set @split1= ''
ELSE
set @split1= @split --select ltrim(RTRIM(@split)) if( @split1 <> '')
set @split2 = @split1+'.';
ELSE
set @split2 = @split1 ; set @sreturn = (select 'select '+cols+' from '+TABLE_NAME+' '+@split1 from
(SELECT DISTINCT TABLE_NAME,STUFF((SELECT ','+@split2+ COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = A.TABLE_NAME FOR XML PATH('')),1,1,'') AS cols
FROM INFORMATION_SCHEMA.COLUMNS AS A
where table_name = UPPER(@ptablename)) t); RETURN @sreturn
END  

使用的时候只需:select  dbo.f_selectall('TABLE','a') ,即可。

输出结果为:select a.col1,a.col2,a.col3 from TABLE a ;

完美代替 select a.* from table a ;

如果不想用别名a,直接空着即可,即select  dbo.f_selectall('TABLE',''),

输出结果为:select col1,col2,col3 from TABLE ;

 Sqlserver获取列名语句:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS where table_name = '表名'

二、Oracle版本:

CREATE OR REPLACE FUNCTION F_SELECTALL (v_table IN VARCHAR2, v_prefix IN VARCHAR2)
RETURN VARCHAR2
IS
Rtsql VARCHAR2 (1000);
prefix VARCHAR2 (20);
temp VARCHAR2 (20);
BEGIN
temp:=trim(v_prefix);
IF temp is null or temp='' THEN
prefix:='';
ELSE
prefix:=v_prefix||'.';
END IF;
select 'select '||t.col||' from '||UPPER(v_table)||' '||v_prefix into Rtsql from
(select wm_concat(t1.col) as col from
(select prefix||column_name as col from user_tab_columns where Table_Name=UPPER(v_table)) t1
) t; Return Rtsql;
-----使用: select F_SELECTALL('x_code','a') from dual;
END;

使用: select F_SELECTALL('x_code','a') from dual

或:select F_SELECTALL('x_code','') from dual

 Oracle获取列名语句:

select * from user_tab_columns where Table_Name= '表名'

三、PostgreSQL版本:

CREATE OR REPLACE FUNCTION "tzwork"."f_selectall"("@v_table" varchar, "@v_prefix" varchar)
RETURNS "pg_catalog"."varchar" AS $BODY$
declare "@result" varchar;
declare "@prefix" varchar;
BEGIN
if(length(trim("@v_prefix"))>0) then
"@prefix"="@v_prefix"||'.';
else
"@prefix"='';
end if; "@result" = ( select 'select '||string_agg("@prefix"||attname ,',')||' from '||relname||' '||"@v_prefix" from
(select t.* from (
select c.relname,col_description(a.attrelid,a.attnum)as comment,a.attname ,format_type(a.atttypid,a.atttypmod) as type,attnotnull as notnull
from pg_class c,pg_attribute a
where c.relname="@v_table" and c.oid=a.attrelid and a.attnum>0
) t where length(type) > 1)test
group by relname
); RETURN "@result";
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100 

使用: select F_SELECTALL('x_code','a')

或:select F_SELECTALL('x_code','')

PostgreSQL获取列名语句

select c.relname,col_description(a.attrelid,a.attnum)as comment,a.attname ,format_type(a.atttypid,a.atttypmod) as type,attnotnull as notnull
from pg_class c,pg_attribute a
where c.relname='表名' and c.oid=a.attrelid and a.attnum>0

四、Mysql版本

DROP FUNCTION IF EXISTS f_selectall;

DELIMITER $
CREATE FUNCTION f_selectall(ptablename VARCHAR(50),split VARCHAR(50))
RETURNS VARCHAR(300)
BEGIN
declare split1 VARCHAR(50);
declare split2 VARCHAR(50);
declare sreturn VARCHAR(3000); select if(ISNULL(split),'',LTRIM(RTRIM(split))) into split1;
select if(split1='',split1,CONCAT(split1,'.')) into split2; select CONCAT('select ',t.col,CONCAT(' from ',ptablename,' ',split1) ) into sreturn
from
(select GROUP_CONCAT(CONCAT('a.',COLUMN_NAME)) col from information_schema.COLUMNS where table_name = ptablename ) t ; RETURN sreturn;
END $ DELIMITER ;

使用: select F_SELECTALL('x_code','a')

或:select F_SELECTALL('x_code','')

 Mysql获取列名语句:

select * from information_schema.COLUMNS where table_name = '表名'

  

自用小工具,工作中可以提高效率。

 

Sql获取表所有列名字段——select * 替换写法,Sqlserver、Oracle、PostgreSQL、Mysql的更多相关文章

  1. sql获取表的所有字段及属性

    select c.name as name,t.name as type ,convert(bit,c.IsNullable) as isNULL , from sysobjects where xt ...

  2. Sql中获取表结构(字段名称,类型,长度,说明)

    Sql中获取表结构(字段名称,类型,长度,说明) SELECT TableName = OBJECT_NAME(c.object_id), ColumnsName = c.name, Descript ...

  3. jdbc链接数据库,获取表名,字段名和数据

    import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import  ...

  4. SQLSERVER和ORACLE系统表获取表名 列名以及列的注释

    在工作中从数据库取的数据要导出来,但是发现导出的EXCEL中列名都是字段名(英文),为此搜集资料怎么把字段名变为中文名称,而发现ORACLE和SQLSERVER(用的SQLSERVER2008R2)又 ...

  5. SQL Server表描述 及 字段描述的增、删、改、查询

    SQL Server表描述 及 字段描述的增.删.改.查询 --测试: --创建表及描述信息 ),isname )) --为表添加描述信息 EXECUTE sp_addextendedproperty ...

  6. SQL查询表,表的所有字段名,SQL查询表,表的所有字段名

    SQL查询表,表的所有字段名 2011-07-29 10:21:43|  分类: SQLServer |  标签:表  sql  字段   |举报 |字号 订阅   SQL查询表,表的所有字段名 SQ ...

  7. SQL添加表字段以及SQL查询表,表的所有字段名

    通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smalli ...

  8. SQL SERVER 表添加新字段

    SQL SERVER 表添加新字段 ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL; -- doc_exa 是表名 -- column_b 是新加的 ...

  9. MySql 、Oracle 获取表结构和字段信息

    1.MySql获取表结构信息 SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA ...

随机推荐

  1. libx264开发笔记(一):libx264介绍、海思平台移植编译

    前言   在编译ffmpeg时,使用到h264编码时是需要依赖libx264的,本文章是将将libx264作为静态库移植到海思上.   相关博客 <Qt开发笔记之编码x264码流并封装mp4(一 ...

  2. Java将彩色PDF转为灰度

    本文以Java代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即:将PDF文档里面的彩色图片或者文字等通过调用PdfGrayConverter.toGrayPdf()方法转为文档页面 ...

  3. 4月2日 python学习总结

    昨天内容回顾: 1.迭代器 可迭代对象: 只要内置有__iter__方法的都是可迭代的对象 既有__iter__,又有__next__方法 调用__iter__方法==>得到内置的迭代器对象 调 ...

  4. Knife4j添加lombok及注解初探

    一.POM添加 在pom文件里添加包 1 <!-- 添加Lombok插件--> 2 <dependency> 3 <groupId>org.projectlombo ...

  5. EasyUI 之datagrid 使用 【DataGrid属性解释】

    可选的参数 DataGrid 属性 覆写了 $.fn.datagrid.defaults. 参数名 类型 描述 默认值 title string Datagrid面板的标题 null iconCls ...

  6. 三极管与MOS管主要参数差别及驱动电路基极(栅极)串联电阻选取原则

    三极管与MOS管都常在电路中被当做开关使用,比较起来: 1. 三极管集电极电流IC (一般为mA级别),远小于MOS管ID(一般为A级别),因此MOS管多用在大电流电路中,如电机驱动 2. 三极管耗散 ...

  7. RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ)

    1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...

  8. Spring Boot 传参 序列化和反序列化

    序列化 反序列化

  9. Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别?

    1.ZooKeeper保证的是CP,Eureka保证的是AP ZooKeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的 Eureka各个节点是平等关系,只要有一台Eureka ...

  10. MyBatis 实现一对一有几种方式?具体怎么操作的?

    有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在 resultMap 里面配置 association 节点配置一对一的类就可以完成: 嵌套查询是先查一个表,根据这个表里面的结果的 ...