实际开发中经常用到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. ArcMap操作随记(5)

    1.[栅格转面]等工具的使用 若栅格数据为浮点型,需使用[转为整型]工具,将栅格转为整型,再进行操作. 2.人口密度分布趋势图 使用[核密度分析]工具,也可尝试插值 3.点要素做面 [点集转线][要素 ...

  2. ERROR conda.core.link:_execute(481) 问题总结

    你好 在刚刚安装的Windows10 conda上,我很惊讶地被告知要将Navigator从1.7.0升级到1.8.2,因为我刚刚安装它.由于软件包没有安装在Navigator上,我尝试使用下面的命令 ...

  3. 造成panic_oom问题的测试代码

    写一个内核模块,来构造内核模块出现panic oom,主要采用vmalloc函数: #include <linux/module.h> #include <linux/mm.h> ...

  4. 细说MVC框架的几大困惑:

    --千万不要为了学习框架而学习框架,而是要为了解决问题而学习框架,这才是一个程序员的正确学习之道. --框架是为了解决一个又一个在Web开发中所遇到的问题而诞生的.不同的框架,都是为了解决不同的问题, ...

  5. 网络编程-Python的socket库

    一.网络连接经常用到的函数 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)参数一:地址簇 socket.AF_INET IPv4(默认) ...

  6. 微服务部署 docker-compose

    1.docker-maven-plugin 介绍 在我们持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很 ...

  7. 分布式锁redis

    1. 首先看这篇文章中  https://mp.weixin.qq.com/s/s-ozSjM5WmSUopxttSWYeQ 为什么redis能实现锁功能呢,看下图,redis命令窗口中,setnx  ...

  8. jvm性能调优工具

    1.jstat 命令 jstat: 查看类装载,内存,垃圾收集,gc相关信息 命令参数 # jstat -option -t #option:参数选项,-t:显示系统的时间 # jstat -opti ...

  9. APScheduler定时任务框架

    1.简介 APScheduler是一个Python**定时任务框架**,提供了**基于日期**.**固定时间间隔**以及**crontab**类型的任务,并且可以**持久化任务**.基于这些功能,我们 ...

  10. FPGA入门到精通系列1:数字电路基础知识

      本文主要介绍数字电路基础知识,用最简洁的内容介绍最核心的知识. 1.数字电路是什么? 数字电路是利用电源电压的高电平和低电平分别表示1和0,进而实现信息的表达.模拟信号:随时间连续变化的信号.处理 ...