Sql获取表所有列名字段——select * 替换写法,Sqlserver、Oracle、PostgreSQL、Mysql
实际开发中经常用到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的更多相关文章
- sql获取表的所有字段及属性
select c.name as name,t.name as type ,convert(bit,c.IsNullable) as isNULL , from sysobjects where xt ...
- Sql中获取表结构(字段名称,类型,长度,说明)
Sql中获取表结构(字段名称,类型,长度,说明) SELECT TableName = OBJECT_NAME(c.object_id), ColumnsName = c.name, Descript ...
- jdbc链接数据库,获取表名,字段名和数据
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import ...
- SQLSERVER和ORACLE系统表获取表名 列名以及列的注释
在工作中从数据库取的数据要导出来,但是发现导出的EXCEL中列名都是字段名(英文),为此搜集资料怎么把字段名变为中文名称,而发现ORACLE和SQLSERVER(用的SQLSERVER2008R2)又 ...
- SQL Server表描述 及 字段描述的增、删、改、查询
SQL Server表描述 及 字段描述的增.删.改.查询 --测试: --创建表及描述信息 ),isname )) --为表添加描述信息 EXECUTE sp_addextendedproperty ...
- SQL查询表,表的所有字段名,SQL查询表,表的所有字段名
SQL查询表,表的所有字段名 2011-07-29 10:21:43| 分类: SQLServer | 标签:表 sql 字段 |举报 |字号 订阅 SQL查询表,表的所有字段名 SQ ...
- SQL添加表字段以及SQL查询表,表的所有字段名
通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smalli ...
- SQL SERVER 表添加新字段
SQL SERVER 表添加新字段 ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL; -- doc_exa 是表名 -- column_b 是新加的 ...
- MySql 、Oracle 获取表结构和字段信息
1.MySql获取表结构信息 SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA ...
随机推荐
- 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件
目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...
- 报错———http://mybatis.org/dtd/mybatis-3-mapper.dtd 报红解决方案
初次使用mybatis时,下面红线上的地址报红. 解决方法是:将http://mybatis.org/dtd/mybatis-3-mapper.dtd拷贝.添加到下面标记处.
- k8s集群关机后,如何解决 kubernetes 重启起不来的问题
如何解决 kubernetes 重启后,启来不来的问题 登录自己的Kubernetes测试集群时发现集群好像没有启动成功 运行 kubectl get pods --all -A ,报错如下. 第一反 ...
- rest-framework之视图和源码解析
视图和源码解析 通过使用mixin类编写视图: from rest_framework import mixins from rest_framework import generics class ...
- Vtune工具简介
VTune是 Intel 提供的一个强大的应用程序性能分析软件,VTune Amplifier XE 2011 集成了Intel VTune Performance Analyzer 和 Thread ...
- centos配置ssh服务并简单测试
最近在做计算机集群方面的东西,简单弄了一下ssh服务. 首先把前提情况介绍一下: 1.我是用的虚拟机先模拟的,也不是没有真机,就是跑来跑去麻烦. 2.装了三个相同配置的centos虚拟机,详细参数就不 ...
- char 和 varchar 的区别是什么?float 和 double 的区别是什么?
char 和 varchar 的区别是什么? char(n) :固定长度类型,比如订阅 char(10),当你输入"abc"三个字符的时候,它们占的空间还是 10 个字节,其他 7 ...
- memcached 与 redis 的区别?
1.Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储.而 memcache 只支持简单数据类型,需要客户端自己处理复 杂对象 2.R ...
- Spring Mvc 源代码之我见 一
spring mvc 是一个web框架,包括controller.model.view 三大块.其中,核心在于model这个模块,用于处理请求的request. 和之前的博客一样,关键的代码,我会标注 ...
- 实验配置cisco单臂路由
第一步 搭建实验拓扑图 第二步 对路由器做基本配置 为路由器创建名称: 设置进入特权模式 口令:控制台登录密码:vty登录密码 禁用DNS查找: 加密明文密码: 创建一个向访问设备者发出警告的标语&q ...