1. sql中显示所有读者的姓名和年龄,并用中文显示列名
1、创建测试表,
create table test_reader(name varchar2(200), age int);
2. SQL如何列出表名
select * from 学生表。。。
所有列
select [id], [name] from [sysobjects] where [type] = 'u' order by [name] 所有表
3. Sql 语句。获取指定表的列名
--isnull函数:需要个参数,如果第一个参数为空,则赋值第二个参数。
SELECT
--空格代表as关键字
( CASE WHEN a.colorder = 1 THEN d.name
ELSE ''
END ) 表名 ,
a.colorder 字段序号 ,
a.name 字段名 ,
( CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√'
ELSE ''
END ) 标识 ,
( CASE WHEN ( SELECT COUNT(*)
FROM sysobjects
WHERE ( name IN (
SELECT name
FROM sysindexes
WHERE ( id = a.id )
AND ( indid IN (
SELECT indid
FROM sysindexkeys
WHERE ( id = a.id )
AND ( colid IN (
SELECT
colid
FROM
syscolumns
WHERE
( id = a.id )
AND ( name = a.name ) ) ) ) ) ) )
AND ( xtype = 'PK' )
) > 0 THEN 'true'
ELSE 'false'
END ) 主键 ,
b.name 类型 ,
a.length 占用字节数 ,
COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS 长度 ,
ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) AS 小数位数 ,
( CASE WHEN a.isnullable = 1 THEN 'true'
ELSE 'false'
END ) 允许空 ,
ISNULL(e.text, '') 默认值 ,
ISNULL(g.[value], '') AS 字段说明
--a代表列集合表:为每个表和视图中的每列返回一行,并为数据库中的存储过程的每个参数返回一行
--b代表列类型表:为数据库中定义的每种系统提供的数据类型和每种用户定义的数据类型返回一行。
FROM syscolumns a
LEFT JOIN systypes b ON a.xtype = b.xusertype
--d代表对象表:在数据库中创建的每个对象(例如约束、默认值、日志、规则以及存储过程)都对应一行
INNER JOIN sysobjects d ON a.id = d.id
AND d.xtype = 'U'
AND d.name <> 'dtproperties'
--e代表e.text是默认值:包含数据库中每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的项
LEFT JOIN syscomments e ON a.cdefault = e.id
--g代表g.[value]是字段说明:针对当前数据库中的每个扩展属性返回一行。
LEFT JOIN sys.extended_properties g ON a.id = g.major_id
AND a.colid = g.major_id
ORDER BY a.id ,
a.colorder
这个方法可以获取当前库存中所有表的所有列。希望对你有用。
4. 什么SQL语句可以列出表的字段名
SQL SERVER中的语句是
select name
from syscolumns
where id =object_id('表名')
把“表名”替换成实际的表名。
5. SQL 如何根据指定值获取列名
insert into 表(T1)
select
case when 字段1 = 1 then '字段1,' else '' end +
case when 字段2 = 1 then '字段2,' else '' end +
case when 字段3 = 1 then '字段3,' else '' end +
...
case when 字段20 = 1 then '字段20,' else '' end
as T1
from 表
6. PL/SQL中 输出列名和对应值。新手请教。
--很奇怪是下面from为什么不能用参数tablename?会报错
select colname into colValue from table1 where hashcode='';
这个from后面不能使用tablename参数很正常,因为你传进来的tablename是一个字符串,而不是一张表,所以是无法将tablename直接这么放到from 后边的 ,还有上面语句,colname本身是你从数据字典表中选到的变量名,也是一个字符型,相当于select '1' into colvalue from table1,这样的colvalue结果一定是'1',而不是colname这个列对应的值。因为colname已经成了字符型了。
应该使用execute immediate来执行。
最终语法修改如下:
declare
tablename varchar2(100):='TABLE1';
colname varchar2(100);
colValue varchar2(500);
selectsql varchar2(200);
--返回表中所有列名
cursor cursor_colname is select column_name as cname from user_tab_columns where table_name=tablename;
begin
open cursor_colname;
LOOP
fetch cursor_colname into colname;
--很奇怪是下面from为什么不能用参数tablename?会报错
selectsql := ' select ' || colname || ' from ' || tablename || ' where hashcode = ''''';
execute immediate selectsql into colValue;
exit when cursor_colname%notfound;
dbms_output.put_line(colname||'='||colValue);
end loop;
close cursor_colname;
end;
7. 在sql数据库里的,查询分析器里,导出查询结果,但没有列名称,怎么才能把列名称也导出
select * from Table1
列名另外再写一段取,导出后复制过去就行
declare @title varchar(8000)
set @title=''
select @title=@title+name+',' from syscolumns where id=(select id from sysobjects where xtype='u' and name='Table1') order by colorder
print @title
8. sql语句能够列出一个表所有列的列名么 sqlite能够列出一个表所有列的列名么
表名和列明一般都存储在系统表里面,只要你找到那个系统表.SQL Server 表名存储在sysobjects中,而列名存储在syscolumns中,从这两张表中能查到某个表的列名