`

Oracle,MySql,SQL Server查看表的创建语句

阅读更多

很多时候,我们想查看数据库中表的结构,当然,如果我们手头有工具的话,只是轻而易举的,但是在没有现成的工具的时候,我们应该怎么做呢,下面就Oracle,MySql,SQL Server分别做介绍:

Oracle

oracle要查看创建表语句使用sqlplus,过程稍微麻烦了一点。

1、调出SQL*Plus
  
  conn scott/tiger@orcl
  
  create table a(a number);
  insert into a values(1);
  insert into a values(2);
  insert into a values(3);
  
  create table b(a number,b varchar2(10));
  insert into b values(1,'1111');
  insert into b values(2,'2222');
  insert into b values(3,'3333');
  commit;

2、打开一个DOS窗口、先执行导出
  
  E:\>exp a/a file=a.dmp log=loga.txt
  
  Export: Release 8.1.6.0.0 - Production on 星期五 12月 1 22:24:16 2000
  
  (c) Copyright 1999 Oracle Corporation. All rights reserved. 网管网www_bitscn_com
  
  
  连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
  With the Partitioning option
  JServer Release 8.1.6.0.0 - Production
  已导出ZHS16GBK字符集和ZHS16GBK NCHAR 字符集
  . 正在导出 pre-schema 过程对象和操作
  . 正在导出用户A的外部函数程序库名称
  . 正在导出用户A的对象类型定义
  即将导出A的对象 ...
  . 正在导出数据库链接
  . 正在导出序号
  . 正在导出群集定义
  . 即将导出A的表通过常规路径 ...
  . . 正在导出表 A 3 行被导出
  . . 正在导出表 B 3 行被导出
  . 正在导出同义词
  . 正在导出视图
  . 正在导出存储的过程
  . 正在导出运算符
  . 正在导出引用完整性约束条件
  . 正在导出触发器
  . 正在导出索引类型
  . 正在导出位图、功能性索引和可扩展索引
  . 正在导出后期表活动
  . 正在导出快照
  . 正在导出快照日志
  . 正在导出作业队列
  . 正在导出刷新组和子组
  . 正在导出维
  . 正在导出 post-schema 过程对象和操作
  . 正在导出统计
  在没有警告的情况下成功终止导出。
  
  E:\>
  
3、再执行导入,使用show=y、log这两个选项

  E:\>imp a/a file=a.dmp show=y log=logb.txt
  Import: Release 8.1.6.0.0 - Production on 星期五 12月 1 22:29:49 2000
  (c) Copyright 1999 Oracle Corporation. All rights reserved.
  连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
  With the Partitioning option
  JServer Release 8.1.6.0.0 - Production
  经由常规路径导出由EXPORT:V08.01.06创建的文件
  已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
  . 正在将A的对象导入到 A
  "CREATE TABLE "A" ("A" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 25"
  "5 LOGGING STORAGE(INITIAL 131072 NEXT 65536 MINEXTENTS 1 MAXEXTENTS 2147483"
  "645 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLE"
  "SPACE "SYSTEM""
  . . 正在跳过表 "A"
  "CREATE TABLE "B" ("A" NUMBER, "B" VARCHAR2(10)) PCTFREE 10 PCTUSED 40 INIT"
  "RANS 1 MAXTRANS 255 LOGGING STORAGE(INITIAL 131072 NEXT 65536 MINEXTENTS 1 " 中国网管联盟bitsCN.com
  "MAXEXTENTS 2147483645 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_P"
  "OOL DEFAULT) TABLESPACE "SYSTEM""
  . . 正在跳过表 "B"
  成功终止导入,但出现警告。
  E:\>

  4、使用编辑器打开logb.txt,里面可以看到DDL语句

MySql

Mysql使用MySQL Command Line Client,操作非常简单

1.打开MySQL Command Line Client,并登陆

Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.22-community-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

2.创建表

mysql> use mysql
Database changed
mysql> create table t_test (id int,name varchar(10),primary key(id));
Query OK, 0 rows affected (0.11 sec)
3.下面就查看我们刚才创建表的SQL语句
mysql> show create table t_test;
+--------+----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------+
| Table  | Create Table

        |
+--------+----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------+
| t_test | CREATE TABLE `t_test` (
  `id` int(11) NOT NULL default '0',
  `name` varchar(10) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+--------+----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------+
1 row in set (0.00 sec)
这样就可以了。

SQL Server

以SQL Server 2000为例,SQL Server显示创建表的SQL语句更加麻烦,要用到存储过程下面的代码摘自互联网

create procedure SP_GET_TABLE_INFO
@ObjName varchar(128) /* The table to generate sql script */
as

declare @Script varchar(255)
declare @ColName varchar(30)
declare @ColID TinyInt
declare @UserType smallint
declare @TypeName sysname
declare @Length TinyInt
declare @Prec TinyInt
declare @Scale TinyInt
declare @Status TinyInt
declare @cDefault int
declare @DefaultID TinyInt
declare @Const_Key varchar(255)
declare @IndID SmallInt
declare @IndStatus Int
declare @Index_Key varchar(255)
declare @DBName varchar(30)
declare @strPri_Key varchar (255)

/*
** Check to see the the table exists and initialize @objid.
*/
if not Exists(Select name from sysobjects where name = @ObjName)
begin
select @DBName = db_name()
raiserror(15009,-1,-1,@ObjName,@DBName)
return (1)
end

create table #spscript
(
id int IDENTITY not null,
Script Varchar(255) NOT NULL,
LastLine tinyint
)

declare Cursor_Column INSENSITIVE CURSOR
for Select a.name,a.ColID,a.usertype,b.name,a.length,a.prec,a.scale,a.Status, a.cDefault,
case a.cdefault when 0 then ' ' else (select c.Text from syscomments c where a.cdefault = c.id) end const_key
from syscolumns a, systypes b where object_name(a.id) = @ObjName
and a.usertype = b.usertype order by a.ColID

set nocount on
Select @Script = 'Create table ' + @ObjName + '('
Insert into #spscript values(@Script,0)

/* Get column information */
open Cursor_Column

fetch next from Cursor_Column into @ColName,@ColID,@UserType,@TypeName,@Length,@Prec,@Scale,
@Status,@cDefault,@Const_Key

Select @Script = ''
while (@@FETCH_STATUS <> -1)
begin
if (@@FETCH_STATUS <> -2)
begin
Select @Script = @ColName + ' ' + @TypeName
if @UserType in (1,2,3,4)
Select @Script = @Script + '(' + Convert(char(3),

@Length) + ') '
else if @UserType in (24)
Select @Script = @Script + '(' + Convert(char(3),@Prec) + ','
+ Convert(char(3),@Scale) + ') '
else
Select @Script = @Script + ' '
if ( @Status & 0x80 ) &gt; 0
Select @Script = @Script + ' IDENTITY(1,1) '

if ( @Status & 0x08 ) &gt; 0
Select @Script = @Script + ' NULL '
else
Select @Script = @Script + ' NOT NULL '
if @cDefault &gt; 0
Select @Script = @Script + ' DEFAULT ' + @Const_Key
end
fetch next from Cursor_Column into @ColName,@ColID,@UserType,@TypeName,@Length,@Prec,@Scale,
@Status,@cDefault,@Const_Key
if @@FETCH_STATUS = 0
begin
Select @Script = @Script + ','
Insert into #spscript values(@Script,0)
end
else


您正在看的SQLserver教程是:MS SQLSERVER 如何得到表的创建语句。; begin
Insert into #spscript values(@Script,1)
Insert into #spscript values(')',0)
end
end
Close Cursor_Column
Deallocate Cursor_Column

/* Get index information */
Declare Cursor_Index INSENSITIVE CURSOR
for Select name,IndID,status from sysindexes where object_name(id)=@ObjName
and IndID &gt; 0 and IndID<>255 order by IndID /*增加了对InDid为255的判断*/
Open Cursor_Index
Fetch Next from Cursor_Index into @ColName, @IndID, @IndStatus
while (@@FETCH_STATUS <> -1)
begin
if @@FETCH_STATUS <> -2
begin

declare @i TinyInt
declare @thiskey varchar(50)
declare @IndDesc varchar(68) /* string to build up index desc in */

Select @i = 1
while (@i <= 16)
begin
select @thiskey = index_col(@ObjName, @IndID, @i)
if @thiskey is null
break

if @i = 1
select @Index_Key = index_col(@ObjName, @IndID, @i)
else
select @Index_Key = @Index_Key + ', ' + index_col(@ObjName, @IndID, @i)
select @i = @i + 1
end
if (@IndStatus & 0x02) > 0
Select @Script = 'Create unique '
else
Select @Script = 'Create '
if @IndID = 1
select @Script = @Script + ' clustered '


if (@IndStatus & 0x800) &gt; 0
select @strPri_Key = ' PRIMARY KEY (' + @Index_Key + ')'
else
select @strPri_Key = ''

if @IndID &gt; 1
select @Script = @Script + ' nonclustered '
Select @Script = @Script + ' index ' + @ColName + ' ON '+ @ObjName
+ '(' + @Index_Key + ')'
Select @IndDesc = ''
/*
** See if the index is ignore_dupkey (0x01).
*/
if @IndStatus & 0x01 = 0x01
Select @IndDesc = @IndDesc + ' IGNORE_DUP_KEY' + ','
/*
** See if the index is ignore_dup_row (0x04).
*/
/* if @IndStatus & 0x04 = 0x04 */
/* Select @IndDesc = @IndDesc + ' IGNORE_DUP_ROW' + ',' */ /* 2000 不在支持*/
/*
** See if the index is allow_dup_row (0x40).
*/
if @IndStatus & 0x40 = 0x40
Select @IndDesc = @IndDesc + ' ALLOW_DUP_ROW' + ','
if @IndDesc <> ''
begin
Select @IndDesc = SubString( @IndDesc, 1, DataLength(@IndDesc) - 1 )
Select @Script = @Script + ' WITH ' + @IndDesc
end
/*
** Add the location of the data.
*/
end
if (@strPri_Key = '')
Insert into #spscript values(@Script,0)
else
update #spscript set Script = Script + @strPri_Key where LastLine = 1

Fetch Next from Cursor_Index into @ColName, @IndID, @IndStatus
end

您正在看的SQLserver教程是:MS SQLSERVER 如何得到表的创建语句。Close Cursor_Index
Deallocate Cursor_Index

Select Script from #spscript

set nocount off

return (0)


补充:采用工具显示创建表SQL是非常简单的,如oracle用PL/SQL,MySql用MySQL Administrator,SQL Server采用自带的工具,由于操作简单,这里就不在过多的介绍了,有兴趣的朋友可以试试。

分享到:
评论

相关推荐

    sqlserver自动生成sql语句工具sqlserver转oracle

    首先,标题中的"sqlserver自动生成sql语句工具"指的是可以分析SQL Server数据库结构和数据,自动生成对应的SQL创建语句的软件。这种工具通常能帮助数据库管理员快速获取数据库的定义,便于备份、迁移或在其他环境中...

    excel自动生成创建表sql语句,支持MySql,Oracle,SQLServer三种创建方式,方便管理

    excel自动生成创建表语句,支持MySql,Oracle,SQLServer三种创建方式,自动生成目录文档,方便查看与管理。

    oracle,sqlserver及mysql对比

    Oracle、SQL Server 及 MySQL 的查询语句执行顺序相同:开始-&gt;FROM 子句-&gt;WHERE 子句-&gt;GROUP BY 子句-&gt;HAVING 子句-&gt;ORDER BY 子句-&gt;SELECT 子句-&gt;LIMIT 子句。每个子句执行后都会产生一个中间结果,供接下来的子句...

    SQL Server转换为MySQL工具

    1. 数据库结构迁移:在转换过程中,工具会分析SQL Server的表结构,包括字段名、字段类型、主键、外键、索引等,并在MySQL中创建相应的表结构。理解这些元数据的重要性在于确保目标数据库能正确地存储源数据库的数据...

    mysql和oracle和sql语句

    例如,MySQL的DML(Data Manipulation Language)语句,如`INSERT`、`UPDATE`和`DELETE`,与标准SQL基本一致,但其DDL(Data Definition Language)如`CREATE TABLE`在某些特性上可能与Oracle或SQL Server有所不同。...

    mysql、oracle、sqlserver三种数据库驱动包

    使用`oracle.jdbc.driver.OracleDriver`类,开发者可以编写Java代码来创建Oracle数据库的连接,执行SQL语句并处理结果集。 最后,SQL Server是微软公司提供的一个企业级数据库管理系统,尤其在Windows环境中表现...

    Java编程实例JDBC+MySQL+Oracle+SQLServer

    Java编程实例JDBC+MySQL+Oracle+SQLServer是关于Java企业级应用开发的重要教程,主要聚焦于Java如何通过Java Database Connectivity (JDBC) API与多种数据库进行交互,包括MySQL、Oracle和SQLServer。JDBC是Java平台...

    数据库转换工具MySQL 转为SqlServer 脚本

    - **生成和执行脚本**:最后,工具会生成SQL Server兼容的创建数据库、表、索引、视图、存储过程等的脚本,这些脚本在SQL Server上执行以重建数据库结构。 5. **数据迁移**:除了结构转换,还需要将MySQL中的数据...

    通用SQL教程oracle,mysql,sqlserver

    MySQL的SQL语法与Oracle和SQL Server大体相似,但在某些特定功能上有所区别,例如视图的创建、触发器的使用以及存储过程的编写。MySQL以其高性能、易用性和高可用性而著称。 SQL Server是由微软公司开发的一款商业...

    excel自动生成创建表语句mysql,sqlserver.xlsm

    excel中支持mysql(主键自增),sqlserver自动创建表语句,方便文档留存查看。oracle也写了宏指令,用office打开文档,按alt+F11自行改宏代码。

    SQL 练习题适合ORACLE MYSQL SQL Server等

    SQL(Structured Query Language)是一种用于管理和操作数据库的强大语言,它被广泛应用于ORACLE、MYSQL、SQL Server等数据库管理系统中。本资源提供了50道SQL练习题,旨在帮助用户提升SQL技能,无论你是初学者还是...

    连接mysql sqlserver的两个数据库

    首先,我们来看标题提到的“连接mysql sqlserver的两个数据库”。这通常涉及到数据库之间的数据迁移、同步或者跨平台查询。为了实现这一目标,我们需要借助特定的驱动程序和工具。 在提供的压缩包文件中,有两个...

    oracle Mysql sqlserver 数据库连接jar

    使用`com.microsoft.sqlserver.jdbc.SQLServerDriver`作为驱动类,同样通过`DriverManager.getConnection()`建立连接。注意,SQL Server驱动可能需要额外的配置参数,如TrustServerCertificate等。 4. **JDBC连接...

    oracle mysql sqlserver分页

    本文将详细介绍Oracle、MySQL以及SQL Server三种主流数据库系统中的分页技术,包括它们各自的实现方法和一些实用技巧。 ### 一、Oracle 分页 Oracle数据库提供了强大的功能来支持分页查询。在Oracle中,主要使用`...

    mysql oracle sqlserver jdbc驱动包

    MySQL、Oracle和SQL Server是三种非常流行的商业和开源关系型数据库管理系统(RDBMS),广泛应用于各种规模的企业和项目中。JDBC(Java Database Connectivity)是Java编程语言的一个标准接口,它允许Java应用程序...

    常用数据库的jar集合,包含mysql,oracle,sqlserver,Access等数据库

    本压缩包集合包含了几个常用数据库的JDBC驱动jar文件,包括MySQL、Oracle、SQL Server和Access,这些都是开发人员进行数据库操作的必备组件。 1. **MySQL**:MySQL是一款开源、免费的关系型数据库管理系统,广泛...

    java数据库驱动 oracle mysql sqlserver oracle pointbase

    本压缩包包含了针对四个不同数据库系统的驱动:Oracle、MySQL、SQL Server以及PointBase。 1. **Oracle**:Oracle数据库是全球最大的企业级关系型数据库管理系统之一,由甲骨文公司提供。Java与Oracle数据库的连接...

    java的jdbc数据库连接驱动包(mysql,oracle,sqlserver)

    连接SQL Server时,应加载`com.microsoft.sqlserver.jdbc.SQLServerDriver`,然后使用`DriverManager.getConnection()`创建连接。 除了驱动包,`连接信息.txt`文件可能包含了连接数据库所需的配置信息,如数据库URL...

    ORACLE、MySQL、SqlServer,三大数据库区别整理以及常用语句

    ### ORACLE、MySQL、SqlServer,三大数据库区别整理以及常用语句 #### 一、数据库简介与对比 在当今数字化时代,数据库技术对于企业信息化管理至关重要。ORACLE、MySQL与SQL Server作为市场上广受欢迎的三种数据库...

    jdbc驱动(mysql、oracle、sql server)

    通过加载`com.microsoft.sqlserver.jdbc.SQLServerDriver`驱动类并调用`DriverManager.getConnection()`方法,可以创建到SQL Server的连接。 使用JDBC驱动进行数据库操作主要包括以下步骤: 1. 加载驱动:使用`...

Global site tag (gtag.js) - Google Analytics