实际开发中经常用到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. python实现解析markdown文档中的图片,并且保存到本地~

    背景 前阵子简书好像说是凉了,搞得我有点小慌,毕竟我的大部分博客都是放在简书上面的,虽然简书提供了打包导出功能,但是只能导出文字,图片的话还是存在简书服务器上面,再加上我一直想要重新做一个个人博客,于 ...

  2. hashlib 模块 摘要算法

    应用于用户登陆,对密码进行加密操作, #文件操作 # hashlib 摘要算法 #md5 算法: 是32位的16进制组成的数字字符组成的字符串 #应用最广的摘要算法 #效率高,相对不复杂,如果只是传统 ...

  3. Django安装和web框架原理

    Django安装和web框架原理 在PyCharm中安装 在cmd中输入 django-admin startproject 项目名 如果报错 不是内部或外部命令,也不是可运行的程序 需要添加环境变量 ...

  4. 钓鱼+DNS欺骗学习笔记

    钓鱼+DNS欺骗学习笔记 0x00 写在前面 原文链接: http://www.cnblogs.com/hkleak/p/5186523.html 感谢大佬无私教学 0x01 步骤如下 第一步:布置钓 ...

  5. [NPUCTF2020]Baby Obfuscation wp

    整体观察main函数,可以发现用户自定义函数和变量存在混淆,猜测为函数名及变量名asc混淆. 对函数进行分析: Fox1为欧几里得算法求最大公约数 Fox5其实是pow Fox4根据逻辑数学的法则实际 ...

  6. Spring bean 和单例bean的线程安全

    Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).prototype(原型).request.session和global session,5种作用域说 ...

  7. Docker容器内连接宿主机即CentOS的Mysql服务器

    docker的宿主机是虚拟机下的CentOS 博主最近遇到一种情况,从服务器拷贝了一份数据库在宿主机Mysql服务器上,想要用本地的数据库测试自己的代码正确性,但是项目程序都是靠docker一键部署的 ...

  8. kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

    Kafka 分布式的单位是 partition,同一个 partition 用一个 write ahead log 组织, 所以可以保证 FIFO 的顺序.不同 partition 之间不能保证顺序. ...

  9. producer内存管理分析

    1 概述 kafka producer调用RecordAccumulator#append来将消息存到本地内存.消息以TopicPartition为key分组存放,每个TopicPartition对应 ...

  10. innodb和myisam

    在Mysql数据库中,常用的引擎主要就是2个:Innodb和MyIASM.这篇文章将主要介绍这两个引擎,以及该如何去选择引擎,最后在提一下这2种引擎所使用的数据结构是什么. 首先介绍一下Innodb引 ...