获取表结构创建脚本

合集下载

PostgreSQL建库建表脚本

PostgreSQL建库建表脚本

PostgreSQL建库建表脚本1.创建⾓⾊(create_role.sql)drop role if exists "kq_acs";create role "kq_acs" login encrypted password 'kq_acs' inherit connection limit -1;2.创建数据库(create_db.sql ) ps:要创建的数据库不存在CREATE DATABASE "kq_acs" WITH OWNER = kq_acs ENCODING = 'UTF8';3.创建表结构(create_tables.sql)/*Navicat PGSQL Data TransferSource Server : 10.0.2.138Source Server Version : 90309Source Host : 10.0.2.138:5432Source Database : acsSource Schema : publicTarget Server Type : PGSQLTarget Server Version : 90309File Encoding : 65001Date: 2017-10-16 18:25:28*/-- ------------------------------ Sequence structure for hibernate_sequence-- ----------------------------DROP SEQUENCE IF EXISTS "public"."hibernate_sequence";CREATE SEQUENCE "public"."hibernate_sequence"INCREMENT 1MINVALUE 1MAXVALUE 9223372036854775807START 1CACHE 1;-- ------------------------------ Table structure for kq_acs-- ----------------------------DROP TABLE IF EXISTS "public"."kq_acs";CREATE TABLE "public"."kq_acs" ("acs_id" varchar(32) COLLATE "default" NOT NULL,"create_time" varchar(50) COLLATE "default" NOT NULL,"emp_id" varchar(32) COLLATE "default" NOT NULL,"company_id" varchar(32) COLLATE "default","dept_id" varchar(32) COLLATE "default","latitude" varchar(20) COLLATE "default","longitude" varchar(20) COLLATE "default","acs_name" varchar(50) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_admin-- ----------------------------DROP TABLE IF EXISTS "public"."kq_admin";CREATE TABLE "public"."kq_admin" (WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_asuq-- ----------------------------DROP TABLE IF EXISTS "public"."kq_asuq";CREATE TABLE "public"."kq_asuq" ("asuq_id" varchar(32) COLLATE "default" NOT NULL, "uuid" varchar(100) COLLATE "default" NOT NULL, "emp_number" varchar(20) COLLATE "default" NOT NULL, "emp_id" varchar(32) COLLATE "default" NOT NULL, "company_id" varchar(32) COLLATE "default" NOT NULL, "dept_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_auth-- ----------------------------DROP TABLE IF EXISTS "public"."kq_auth";CREATE TABLE "public"."kq_auth" ("auth_id" varchar(50) COLLATE "default" NOT NULL, "auth_list" varchar(1000) COLLATE "default", "purview" varchar(50) COLLATE "default","emp_id" varchar(50) COLLATE "default" NOT NULL, "company_id" varchar(50) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_dept-- ----------------------------DROP TABLE IF EXISTS "public"."kq_dept";CREATE TABLE "public"."kq_dept" ("dept_id" varchar(32) COLLATE "default" NOT NULL, "dept_num" varchar(20) COLLATE "default" NOT NULL, "dept_name" varchar(20) COLLATE "default" NOT NULL, "company_id" varchar(32) COLLATE "default","set_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_emp-- ----------------------------DROP TABLE IF EXISTS "public"."kq_emp";CREATE TABLE "public"."kq_emp" ("emp_id" varchar(32) COLLATE "default" NOT NULL, "emp_number" varchar(20) COLLATE "default" NOT NULL, "emp_name" varchar(30) COLLATE "default" NOT NULL, "phone" varchar(12) COLLATE "default" NOT NULL, "email" varchar(30) COLLATE "default", "hasmod" int4 NOT NULL,"head_img" varchar(300) COLLATE "default", "gender" varchar(8) COLLATE "default","age" int4,"temp_code_limit" varchar(32) COLLATE "default","mac_name" varchar(40) COLLATE "default","dept_id" varchar(32) COLLATE "default","company_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_employ-- ----------------------------DROP TABLE IF EXISTS "public"."kq_employ";CREATE TABLE "public"."kq_employ" ("ephone" varchar(50) COLLATE "default" NOT NULL, "epwd" varchar(50) COLLATE "default" NOT NULL, "epid" varchar(50) COLLATE "default" NOT NULL, "speaker_id" varchar(50) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_feedback-- ----------------------------DROP TABLE IF EXISTS "public"."kq_feedback"; CREATE TABLE "public"."kq_feedback" ("feedback_id" varchar(32) COLLATE "default" NOT NULL, "feedbackinfo" text COLLATE "default" NOT NULL, "create_time" char(50) COLLATE "default" NOT NULL, "phone" varchar(50) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_leave-- ----------------------------DROP TABLE IF EXISTS "public"."kq_leave";CREATE TABLE "public"."kq_leave" ("leave_id" varchar(32) COLLATE "default" NOT NULL, "leave_type" varchar(10) COLLATE "default" NOT NULL, "start_time" varchar(50) COLLATE "default" NOT NULL, "end_time" varchar(50) COLLATE "default","create_time" varchar(50) COLLATE "default" NOT NULL, "leave_content" varchar(100) COLLATE "default" NOT NULL, "approval_name" varchar(40) COLLATE "default" NOT NULL, "emp_id" varchar(32) COLLATE "default","company_id" varchar(32) COLLATE "default","dept_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_loc-- ----------------------------DROP TABLE IF EXISTS "public"."kq_loc";CREATE TABLE "public"."kq_loc" ("loc_id" int4 NOT NULL,"loc_time" varchar(30) COLLATE "default",)WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_lock-- ----------------------------DROP TABLE IF EXISTS "public"."kq_lock";CREATE TABLE "public"."kq_lock" ("lock_id" varchar(32) COLLATE "default" NOT NULL, "lock_name" varchar(100) COLLATE "default","lock_number" varchar(20) COLLATE "default", "company_id" varchar(32) COLLATE "default" NOT NULL, "lock_ip" varchar(32) COLLATE "default","emp_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_mac-- ----------------------------DROP TABLE IF EXISTS "public"."kq_mac";CREATE TABLE "public"."kq_mac" ("mac_id" varchar(32) COLLATE "default" NOT NULL, "mac" varchar(20) COLLATE "default", "macname" varchar(40) COLLATE "default", "company_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_operation_record-- ----------------------------DROP TABLE IF EXISTS "public"."kq_operation_record"; CREATE TABLE "public"."kq_operation_record" ( "operation_id" varchar(32) COLLATE "default" NOT NULL, "operation_type" varchar(32) COLLATE "default", "operation_date" varchar(32) COLLATE "default","emp_id" varchar(32) COLLATE "default" NOT NULL, "company_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_statistics-- ----------------------------DROP TABLE IF EXISTS "public"."kq_statistics"; CREATE TABLE "public"."kq_statistics" ("sts_id" varchar(32) COLLATE "default" NOT NULL,"on_time" varchar COLLATE "default","off_time" varchar COLLATE "default","shicha" varchar(11) COLLATE "default","result" varchar(10) COLLATE "default" NOT NULL,"on_flag" varchar(15) COLLATE "default","off_flag" varchar(15) COLLATE "default","emp_id" varchar(32) COLLATE "default","company_id" varchar(32) COLLATE "default",;-- ------------------------------ Table structure for kq_timeset-- ----------------------------DROP TABLE IF EXISTS "public"."kq_timeset";CREATE TABLE "public"."kq_timeset" ("set_id" varchar(32) COLLATE "default" NOT NULL,"am_time" varchar(100) COLLATE "default" NOT NULL, "pm_time" varchar(100) COLLATE "default" NOT NULL, "shiduan" varchar(20) COLLATE "default" NOT NULL, "company_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_travel-- ----------------------------DROP TABLE IF EXISTS "public"."kq_travel";CREATE TABLE "public"."kq_travel" ("travel_id" varchar(32) COLLATE "default" NOT NULL, "create_time" varchar(60) COLLATE "default" NOT NULL, "travel_reason" varchar(100) COLLATE "default" NOT NULL, "emp_id" varchar(32) COLLATE "default","company_id" varchar(32) COLLATE "default","dept_id" varchar(32) COLLATE "default","travel_starttime" varchar(50) COLLATE "default","travel_endtime" varchar(50) COLLATE "default", "latitude" varchar(20) COLLATE "default", "longitude" varchar(20) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_users-- ----------------------------DROP TABLE IF EXISTS "public"."kq_users";CREATE TABLE "public"."kq_users" ("company_id" varchar(32) COLLATE "default" NOT NULL, "name" varchar(20) COLLATE "default" NOT NULL, "username" varchar(30) COLLATE "default" NOT NULL, "password" varchar(32) COLLATE "default","email" varchar(30) COLLATE "default" NOT NULL, "company_name" varchar(50) COLLATE "default" NOT NULL, "company_tel" varchar(16) COLLATE "default", "company_logo" varchar(100) COLLATE "default","active_key" varchar(32) COLLATE "default","company_mac" varchar(100) COLLATE "default","active_code" varchar(32) COLLATE "default", "latitude" varchar(20) COLLATE "default", "longitude" varchar(20) COLLATE "default", "mobilephone" varchar(16) COLLATE "default", "checkmac" varchar(20) COLLATE "default")WITH (OIDS=FALSE);-- ----------------------------"verify_log_id" varchar(32) COLLATE "default" NOT NULL, "verify_id" varchar(32) COLLATE "default" NOT NULL, "verify_result" int4 NOT NULL,"verify_time" date NOT NULL,"verify_number" varchar(10) COLLATE "default" NOT NULL, "read_number" varchar(10) COLLATE "default" NOT NULL, "normscore" float8,"score" float8,"verify_voice" oid NOT NULL,"verify_type" int4,"emp_id" varchar(32) COLLATE "default" NOT NULL)WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_verifyrecord-- ----------------------------DROP TABLE IF EXISTS "public"."kq_verifyrecord"; CREATE TABLE "public"."kq_verifyrecord" ("verify_id" varchar(32) COLLATE "default" NOT NULL, "punch_time" varchar(50) COLLATE "default" NOT NULL, "verify_result" int4 NOT NULL,"verify_number" varchar(10) COLLATE "default" NOT NULL, "read_number" varchar(10) COLLATE "default" NOT NULL, "normscore" float8 NOT NULL,"score" float8 NOT NULL,"verify_voice" varchar(100) COLLATE "default" NOT NULL, "verify_type" int4,"verify_times" int4,"emp_id" varchar(32) COLLATE "default","company_id" varchar(32) COLLATE "default","dept_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_vp-- ----------------------------DROP TABLE IF EXISTS "public"."kq_vp";CREATE TABLE "public"."kq_vp" ("vp_id" varchar(32) COLLATE "default" NOT NULL, "model" varchar(100) COLLATE "default","voice" varchar(100) COLLATE "default","create_time" varchar(30) COLLATE "default" NOT NULL, "company_id" varchar(32) COLLATE "default","dept_id" varchar(32) COLLATE "default","emp_id" varchar(32) COLLATE "default")WITH (OIDS=FALSE);-- ------------------------------ Table structure for kq_vp_log-- ----------------------------DROP TABLE IF EXISTS "public"."kq_vp_log";CREATE TABLE "public"."kq_vp_log" ("vp_log_id" varchar(32) COLLATE "default" NOT NULL, "vp_id" varchar(32) COLLATE "default" NOT NULL, "create_time" date NOT NULL,;-- ------------------------------ Alter Sequences Owned By-- ------------------------------ ------------------------------ Primary Key structure for table kq_acs-- ----------------------------ALTER TABLE "public"."kq_acs" ADD PRIMARY KEY ("acs_id");-- ------------------------------ Primary Key structure for table kq_admin-- ----------------------------ALTER TABLE "public"."kq_admin" ADD PRIMARY KEY ("admin_id");-- ------------------------------ Primary Key structure for table kq_asuq-- ----------------------------ALTER TABLE "public"."kq_asuq" ADD PRIMARY KEY ("asuq_id");-- ------------------------------ Primary Key structure for table kq_auth-- ----------------------------ALTER TABLE "public"."kq_auth" ADD PRIMARY KEY ("auth_id");-- ------------------------------ Primary Key structure for table kq_dept-- ----------------------------ALTER TABLE "public"."kq_dept" ADD PRIMARY KEY ("dept_id");-- ------------------------------ Primary Key structure for table kq_emp-- ----------------------------ALTER TABLE "public"."kq_emp" ADD PRIMARY KEY ("emp_id");-- ------------------------------ Primary Key structure for table kq_employ-- ----------------------------ALTER TABLE "public"."kq_employ" ADD PRIMARY KEY ("epid");-- ------------------------------ Primary Key structure for table kq_feedback-- ----------------------------ALTER TABLE "public"."kq_feedback" ADD PRIMARY KEY ("feedback_id"); -- ------------------------------ Primary Key structure for table kq_leave-- ----------------------------ALTER TABLE "public"."kq_leave" ADD PRIMARY KEY ("leave_id");-- ------------------------------ Primary Key structure for table kq_loc-- ----------------------------ALTER TABLE "public"."kq_loc" ADD PRIMARY KEY ("loc_id");-- ------------------------------ Primary Key structure for table kq_lock-- ----------------------------ALTER TABLE "public"."kq_lock" ADD PRIMARY KEY ("lock_id");-- ------------------------------ Primary Key structure for table kq_mac-- Primary Key structure for table kq_operation_record-- ----------------------------ALTER TABLE "public"."kq_operation_record" ADD PRIMARY KEY ("operation_id");-- ------------------------------ Primary Key structure for table kq_statistics-- ----------------------------ALTER TABLE "public"."kq_statistics" ADD PRIMARY KEY ("sts_id");-- ------------------------------ Primary Key structure for table kq_timeset-- ----------------------------ALTER TABLE "public"."kq_timeset" ADD PRIMARY KEY ("set_id");-- ------------------------------ Primary Key structure for table kq_travel-- ----------------------------ALTER TABLE "public"."kq_travel" ADD PRIMARY KEY ("travel_id");-- ------------------------------ Primary Key structure for table kq_users-- ----------------------------ALTER TABLE "public"."kq_users" ADD PRIMARY KEY ("company_id");-- ------------------------------ Primary Key structure for table kq_verify_log-- ----------------------------ALTER TABLE "public"."kq_verify_log" ADD PRIMARY KEY ("verify_log_id");-- ------------------------------ Primary Key structure for table kq_verifyrecord-- ----------------------------ALTER TABLE "public"."kq_verifyrecord" ADD PRIMARY KEY ("verify_id");-- ------------------------------ Primary Key structure for table kq_vp-- ----------------------------ALTER TABLE "public"."kq_vp" ADD PRIMARY KEY ("vp_id");-- ------------------------------ Primary Key structure for table kq_vp_log-- ----------------------------ALTER TABLE "public"."kq_vp_log" ADD PRIMARY KEY ("vp_log_id");-- ------------------------------ Foreign Key structure for table "public"."kq_acs"-- ----------------------------ALTER TABLE "public"."kq_acs" ADD FOREIGN KEY ("emp_id") REFERENCES "public"."kq_emp" ("emp_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_acs" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_acs" ADD FOREIGN KEY ("dept_id") REFERENCES "public"."kq_dept" ("dept_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_asuq"-- ----------------------------ALTER TABLE "public"."kq_asuq" ADD FOREIGN KEY ("emp_id") REFERENCES "public"."kq_emp" ("emp_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_asuq" ADD FOREIGN KEY ("dept_id") REFERENCES "public"."kq_dept" ("dept_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_asuq" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_auth" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_dept"-- ----------------------------ALTER TABLE "public"."kq_dept" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_emp"-- ----------------------------ALTER TABLE "public"."kq_emp" ADD FOREIGN KEY ("dept_id") REFERENCES "public"."kq_dept" ("dept_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_emp" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_leave"-- ----------------------------ALTER TABLE "public"."kq_leave" ADD FOREIGN KEY ("emp_id") REFERENCES "public"."kq_emp" ("emp_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_leave" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_leave" ADD FOREIGN KEY ("dept_id") REFERENCES "public"."kq_dept" ("dept_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_lock"-- ----------------------------ALTER TABLE "public"."kq_lock" ADD FOREIGN KEY ("emp_id") REFERENCES "public"."kq_emp" ("emp_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_lock" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_mac"-- ----------------------------ALTER TABLE "public"."kq_mac" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_operation_record"-- ----------------------------ALTER TABLE "public"."kq_operation_record" ADD FOREIGN KEY ("emp_id") REFERENCES "public"."kq_emp" ("emp_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_operation_record" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_statistics"-- ----------------------------ALTER TABLE "public"."kq_statistics" ADD FOREIGN KEY ("emp_id") REFERENCES "public"."kq_emp" ("emp_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_statistics" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_statistics" ADD FOREIGN KEY ("dept_id") REFERENCES "public"."kq_dept" ("dept_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_timeset"-- ----------------------------ALTER TABLE "public"."kq_timeset" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON-- ----------------------------ALTER TABLE "public"."kq_travel" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_travel" ADD FOREIGN KEY ("dept_id") REFERENCES "public"."kq_dept" ("dept_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_travel" ADD FOREIGN KEY ("emp_id") REFERENCES "public"."kq_emp" ("emp_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_verifyrecord"-- ----------------------------ALTER TABLE "public"."kq_verifyrecord" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_verifyrecord" ADD FOREIGN KEY ("dept_id") REFERENCES "public"."kq_dept" ("dept_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_verifyrecord" ADD FOREIGN KEY ("emp_id") REFERENCES "public"."kq_emp" ("emp_id") ON DELETE CASCADE ON UPDATE CASCADE;-- ------------------------------ Foreign Key structure for table "public"."kq_vp"-- ----------------------------ALTER TABLE "public"."kq_vp" ADD FOREIGN KEY ("emp_id") REFERENCES "public"."kq_emp" ("emp_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_vp" ADD FOREIGN KEY ("dept_id") REFERENCES "public"."kq_dept" ("dept_id") ON DELETE CASCADE ON UPDATE CASCADE;ALTER TABLE "public"."kq_vp" ADD FOREIGN KEY ("company_id") REFERENCES "public"."kq_users" ("company_id") ON DELETE CASCADE ON UPDATE CASCADE;4.赋予权限(create_authority.sql)GRANT all ON DATABASE "kq_acs" TO "kq_acs";GRANT all ON SCHEMA "public" TO "kq_acs";GRANT all ON all tables in SCHEMA "public" to "kq_acs";。

【干货分享】DM数据库获取表结构和对象定义方法

【干货分享】DM数据库获取表结构和对象定义方法

【干货分享】DM数据库获取表结构和对象定义方法很多新手在开始使用DM数据库时,都问过如何获取表结构信息的问题,今日我整理了获取表结构的各种方法,也可以从这些方法中获取其他对象的定义信息,比如表、视图、存储过程、函数、包等DDL创建语句,供大家参考。

本章介绍DM数据库获取表结构方法。

本章的测试环境:①操作系统: Window 10 (64位)②数据库版本:DM8相关关键字:DM数据库对象定义语句表结构DM数据库获取对象定义信息下面从系统包、系统过程、数据字典、DI SQL窗口和客户端管理工具等方面介绍获取表结构、视图和其他对象定义的方法。

1 使用DBMS_META系统包DBMS_META系统包兼容Oracle功能,其GET_DDL函数用于获取数据库对表、视图、索引、全文索引、存储过程、函数、包、序列、同义词、约束、触发器等定义的DDL语句。

语法如下:FUNCTION GET_DDL(OBJECT_TYPE IN V ARCHAR(30),NAME IN V ARCHAR(128),SCHNAME IN V ARCHAR(128) DEFAULT NULL) RETURN CLOB参数详解OBJECT_TYPE 对象类型。

包括表、视图、物化视图、索引、全文索引、存储过程、函数、包、目录等,具体可参考《DM8系统包使用手册》。

OBJECT_TYPE只能为大写。

NAME 对象名称,区分大小写。

SCHEMA 模式,默认是当前用户模式。

①获取表定义语句select dbms_metadata.get_ddl(OBJECT_TYPE => 'TABLE',NAME=>upper('EMPLOYEE'), SCHNAME => 'DMHR');结果展示如下,从结果中可查看表及相关主键、外键、唯一性约束等相关定义:②获取函数/存储过程定义语句执行如下命令查询DMHR用户下存储过程P_EXPORTDATA的定义语句:select dbms_metadata.get_ddl(OBJECT_TYPE => 'PROCEDURE',NAME=UPPER('P_EXPORTDATA'),SCHNAME='DMHR');在DI SQL窗口下执行时需注意返回的字符串过长会被截断,需设置long属性值较大。

idea通过数据库表自动生成lombok结构的实体类 groovy文件的语法

idea通过数据库表自动生成lombok结构的实体类 groovy文件的语法

使用Lombok和Groovy结合,自动从数据库表生成实体类和对应的Groovy文件,通常涉及到几个步骤。

这里是一个简化的流程和示例:1. 设置环境:确保你的项目已经添加了Lombok和Groovy的依赖。

使用一个数据库,如MySQL、PostgreSQL等。

2. 工具选择:你可以选择使用工具如dbreverse或dbtoaster来从数据库表生成实体类。

如果你想使用Groovy脚本,你可以手动编写一个脚本来读取数据库表结构并生成Groovy文件。

3. 手动编写Groovy脚本:以下是一个简化的示例,展示如何使用Groovy从数据库表生成实体类和对应的Groovy 文件:groovyimport groovy.sql.Sqldef dbUrl = 'jdbc:mysql:3306/mydb'def dbUser = 'root'def dbPassword = 'password'def driver = 'com.mysql.cj.jdbc.Driver'def sql = Sql.newInstance(dbUrl, dbUser, dbPassword, driver)def tables = sql.execute('SHOW TABLES')tables.each { tableName ->def columns = sql.execute("SELECT FROM ${tableName}")columns.each { column ->def property = column.columnNamedef type = column.dataType.toLowerCase()println """@ToString@Builderpublic class ${tableName.capitalize()} {private ${type} ${property};// getters and setters...}}}这个脚本会为数据库中的每个表生成一个实体类。

python 读取数据库表结构 字段 说明

python 读取数据库表结构 字段 说明

《Python 深度探讨:读取数据库表结构及字段说明》一、引言在现代信息化社会中,数据已经成为一种无可替代的资源。

而作为数据存储和管理的主要载体之一,数据库自然成为了不可或缺的存在。

在数据库中,表结构和字段说明是每个数据工作者需要深入了解的内容,而本文将从 Python 的角度出发,深入探讨如何使用 Python 读取数据库表结构及字段说明,以帮助读者更好理解和应用这一重要知识。

二、Python 读取数据库表结构 1. 使用第三方库连接数据库Python 提供了多种连接数据库的第三方库,如 pymysql、psycopg2、cx_Oracle 等,读者可根据自身需求选择合适的库进行安装和配置。

2.获取数据库连接使用第三方库提供的 API,结合数据库的连接信息(如主机位置区域、端口号、用户名、密码等),获取数据库连接对象,进而可以执行 SQL 查询语句。

3.查询表结构通过执行 SHOW TABLES 或 DESC 表名等 SQL 查询语句,可以获取到目标数据库中所有表的名称和结构信息。

读者也可以尝试使用数据库系统自带的元数据表,如information_schema(MySQL)、sys.tables(SQL Server)等,进行更加灵活和定制化的查询。

4.解析结果集获取到表结构信息后,读者可以使用Python 的数据处理和解析能力,将结果集转换为更加友好和便于理解的格式。

可以将结果集转换为 DataFrame(pandas)、字典(dict)、JSON 等格式,并进行进一步的处理和分析。

5.示例代码下面的示例代码演示了如何使用 Python连接 MySQL 数据库,并获取指定表的结构信息:import pymysqlimport pandas as pd# 连接数据库conn = pymysql.connect(host='localhost', port=3306, user='roo t', password='123456', database='test')cursor = conn.cursor()# 查询表结构sql = 'DESC employee'cursor.execute(sql)results = cursor.fetchall()# 解析结果集df = pd.DataFrame(results, columns=['Field', 'Type', 'Null', 'Key', 'Default', 'Extra'])print(df)# 关闭连接cursor.close()conn.close()以上示例代码通过 pymysql 连接了 MySQL 数据库,查询了employee 表的结构信息,并将结果集转换为了 DataFrame 格式,方便读者进行后续的分析和处理。

导出informix数据库表结构脚本

导出informix数据库表结构脚本
导出完成 将提示 dbexport completed! 导出过程可能有点慢(等待)
导出完成后将在 <保存的目录> 下产生一个文件夹 db_das.exp(导出的数据库名.exp)
导入数据库
输入:dbimport -c -i d:\informix db_das
select * from systables
where tabid > 99
// tabname 存放表的名字
// tabtype 存放表的类型 T=表,E=外部表,V=视图......
//SQL参考指南 nrows 表中的行数 ncols 表中的列数
//*****************************************************************************
7)导出数据库中对用户或角色的授权信息$>;dbschema -d your_database_name
7)导出数据库中对用户或角色的授权信息
$>dbschema -d your_database_name -p all
$>dbschema -d your_database_name -r all
onstat -d 看一看你的数据库空间是怎么分配的
如果你在做dbimport的时候没有指定参数,那么会把整个数据库建在rootdbs上。
如果数据库空间规划得比较细的话,应该有专用于装数据的dbspace。
//*****************************************************************************

powerdesigner mysql导出表结构

powerdesigner mysql导出表结构

powerdesigner mysql导出表结构PowerDesigner是一款强大的数据库设计工具,可以帮助用户设计、管理和维护数据库。

它支持多种数据库平台,包括MySQL。

在使用PowerDesigner时,用户可以方便地导出MySQL表结构,并进行灵活的修改和调整。

下面,我将介绍如何使用PowerDesigner导出MySQL表结构,并对其功能进行简要的说明。

首先,我们需要在PowerDesigner中创建一个新的物理数据模型,并为其选择MySQL作为目标平台。

在PowerDesigner的菜单栏中,选择“文件”>“新建”>“模型”,然后在弹出的对话框中选择“MySQL”作为目标平台。

接着,我们可以按需在物理数据模型中添加表、字段、索引、主键、外键等元素。

完成数据模型设计后,我们可以点击工具栏中的“生成DDL”按钮来生成MySQL的DDL(数据定义语言)脚本。

在弹出的对话框中,我们需要选择要生成脚本的对象(可以是整个模型、某个表或某个列),并在“选项”选项卡中进行相关设置,例如选择要生成的脚本类型(DDL、创建表、修改表等)、选择文本编码、设置表名的命名规则等。

在选择好要生成脚本的对象和相关选项后,点击“确定”按钮即可生成MySQL的DDL脚本。

生成的脚本可以保存为文件,供后续使用。

此外,PowerDesigner还提供了查看生成脚本的功能,我们可以直接在PowerDesigner中查看并修改生成的DDL脚本。

除了生成DDL脚本外,PowerDesigner还支持将表结构导出为其他格式的文件,例如Excel、CSV等。

在工具栏中选择“文件”>“导出”>“表定义”,然后选择导出格式和文件保存路径,即可将表结构导出为其他格式的文件。

导出的表结构文件可以方便我们进行备份、分享和使用。

当需要导入表结构时,我们可以使用MySQL的命令行工具或其他工具,如phpMyAdmin等。

oracle初学者必备_scott用户脚本创建及表结构及函数练习实例

oracle初学者必备_scott用户脚本创建及表结构及函数练习实例

oracle初学者必备_scott用户脚本创建及表结构及函数练习实例Oracle数据库的Scott用户创建脚本---- Copyright (c) Oracle Corporation 1988, 2000. All Rights Reserved. ---- NAME-- demobld.sql---- DESCRIPTION-- This script creates the SQL*Plus demonstration tables in the-- current schema. It should be STARTed by each user wishing to-- access the tables. To remove the tables use the demodrop.sql-- script.---- USAGE-- From within SQL*Plus, enter:-- START demobld.sqlSET TERMOUT ONPROMPT Building demonstration tables. Please wait. SET TERMOUT OFF DROP TABLE EMP;DROP TABLE DEPT;DROP TABLE BONUS;DROP TABLE SALGRADE;DROP TABLE DUMMY;CREATE TABLE EMP(EMPNO NUMBER(4) NOT NULL,ENAME VARCHAR2(10),JOB VARCHAR2(9),MGR NUMBER(4),HIREDATE DATE,SAL NUMBER(7, 2),COMM NUMBER(7, 2),DEPTNO NUMBER(2));INSERT INTO EMP VALUES(7369, 'SMITH', 'CLERK', 7902,TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20);INSERT INTO EMP VALUES(7499, 'ALLEN', 'SALESMAN', 7698,TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30); INSERT INTO EMP VALUES(7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30); INSERT INTO EMP VALUES(7566, 'JONES', 'MANAGER', 7839,TO_DATE('2-APR-1981', 'DD-MON-YYYY'), 2975, NULL, 20); INSERT INTO EMP VALUES(7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30); INSERT INTO EMP VALUES(7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30); INSERT INTO EMP VALUES(7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10); INSERT INTO EMP VALUES(7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20); INSERT INTO EMP VALUES(7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10); INSERT INTO EMP VALUES(7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30); INSERT INTO EMP VALUES(7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20); INSERT INTO EMP VALUES(7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30); INSERT INTO EMP VALUES(7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20); INSERT INTO EMP VALUES(7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10);CREATE TABLE DEPT(DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13) );INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO DEPT VALUES (40, 'OPERATIONS','BOSTON');CREATE TABLE BONUS(ENAME VARCHAR2(10),JOB VARCHAR2(9),SAL NUMBER,COMM NUMBER);CREATE TABLE SALGRADE(GRADE NUMBER,LOSAL NUMBER,HISAL NUMBER);INSERT INTO SALGRADE VALUES (1, 700, 1200); INSERT INTO SALGRADE VALUES (2, 1201, 1400); INSERT INTO SALGRADE VALUES (3, 1401, 2000);INSERT INTO SALGRADE VALUES (4, 2001, 3000); INSERT INTO SALGRADE VALUES (5, 3001, 9999);CREATE TABLE DUMMY(DUMMY NUMBER);INSERT INTO DUMMY VALUES (0);COMMIT;SET TERMOUT ONPROMPT Demonstration table build is complete.EXITSCOTT用户四张表结构表一:部门表DEPT(使用DESC DEPT;查询)名称类型描述 NO表示部门编号有两位数字所组成 1 DEPTNO NUMBER(2)VARCHAR2(14) 表示部门名称最多由14个字符所组成 2 DNAMEVARCHAR2(13) 表示部门所在位置 3 LOC(SELECT * FROM DEPT;)NO DEPTNO DNAME LOCACCOUNTING(财NEWYORK(纽约) 1 10务部,会计部)RESEARCH(调研DALLAS(达拉斯) 2 20部)SALES(营业部,市CHICAGO(芝加哥) 3 30场部)OPERATIONS(运营BOSTON(波士顿) 4 40部)表二:雇员表EMP(使用DESC EMP;查询)名称类型描述NUMBER(4) 表示雇员编号,由四个数字组成 EMPNO VARCHAR2(10) 表示雇员姓名,由10个字符组成 ENAME VARCHAR2(9) 表示雇员的职位,由9个字符组成 JOB NUMBER(4) 表示雇员对应的领导编号,领导也是雇员 MGR表示雇员的雇佣日期 HIREDATE DATENUMBER(7,2) 表示雇员的基本工资,由两位小数5位整数SAL 和2位小数组成,共7位NUMBER(7,2) 表示雇员的奖金 COMMNUMBER(2) 表示雇员所在部门的编号 DEPTNO(SELECT * FROM EMP;)NO EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO CLERK(办17-12月-80 1 7369 SMITH7902 800 20(史密事员)斯)20-2月-81 2 7499 ALLENSALESMAN7698 1600 300 30(艾伦) (销售员)22-2月-81 3 7521 WARD SALESMAN 7698 1250 500 30(沃德)02-4月-81 4 7566 JONES MANAGER7839 2975 20(琼斯) (经理主管)28-9月-81 5 7654 MARTINSALESMAN 7698 1250 1400 30()马丁01-5月-81 6 7698 BLAKE MANAGER 7839 2850 30 (布雷克)09-6月-81 7 7782 CLARKMANAGER 7839 2450 10(克拉克)19-4月-87 8 7788 SCOTTANALYST7566 3000 20(斯科(分析员)特)17-11月-81 9 7839 KINGPRESIDENT 5000 10(金) (总经理,总裁)08-9月-81 10 7844 TURNERSALESMAN 7698 1500 0 30 (特纳)23-5月-87 11 7876 ADANSCLERK 7788 1100 20(奥丹斯)03-12月-81 12 7900 JAMESCLERK 7698 950 30(詹姆斯)03-12月-81 13 7902 FORDANALYST 7566 3000 20 (福特)23-1月-82 14 7934 MILLERCLERK 7782 1300 10(米勒)表三:工资等级表:(DESC SALGRADE)名称类型描述 NO工资的等级 1 GRADE NUMBER此等级的最低工资 2 LOSAL NUMBER此等级的最高工资 3 HISAL NUMBER(SELECT * FROM SALGRADE;查询)NO GRADE LOSAL HISAL 1 1 700 1200 2 2 1201 1400 3 3 1401 2000 4 4 2001 3000 5 5 3001 9999表四:工资表BONUS:(DESC BONUS)名称类型描述 NOVARCHAR2(10) 雇员姓名 1 ENAME雇员职位 2 JOB VARCHAR2(9)雇员基本工资 3 SAL NUMBER奖金,提成 4 COMM NUMBERSCOTT用户语句与函数练习--1.列出至少有一个员工的所有部门select d.dname, t1.cofrom (select e.deptno, count(e.deptno) co from emp e group bye.deptno) t1,dept dwhere d.deptno = t1.deptno and t1.co > 1;--2.列出薪金比‘SMITH’多的所有员工select *from empwhere sal > (select e.sal from emp e where e.ename = 'SMITH');--3.列出所有员工的姓名以及直接上级的姓名select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr =e2.empno;--4.列出受雇日期早于直接上级入职日期的职工编号,姓名,部门名称select e1.empno 员工号,e1.ename 员工姓名,e1.hiredate 入职日期,e2.ename 上级姓名,e2.hiredate 上级入职日期from emp e1, emp e2where e1.mgr = e2.empnoand e1.hiredate < e2.hiredate; --5.列出部门名称和这些部门的员工信息,同时列出没有员工的部门信息 select d.dname, e.*from emp eright outer join dept don e.deptno = d.deptnoorder by d.dname;--6.列出所有职位为'CLERK'的姓名和部门名称,部门人数select e.ename, d.dnamefrom emp e, dept dwhere e.deptno = d.deptnoand e.job = 'CLERK';--7.列出最低工薪大于1500的各种工作以及从事此工作的全部雇员的人数select distinct e.job, count(*) from emp ewhere e.sal > 1500group by e.job;--8.列出在部门'SALES'(销售部)工作的员工信息,假设不知道销售部门的部门号 select e.ename from emp e where e.job = 'SALESMAN';--9.列出薪金高于公司平均薪金的所有员工,部门,上级领导,工资级别 select e2.ename, e2.deptno, e3.ename, s.gradefrom emp e2, emp e3, salgrade swhere e2.sal > (select avg(e.sal) from emp e) and (e2.sal between s.losal and s.hisal) and e2.mgr = e3.empno;--10.列出与'SCOTT'从事相同工作的所有员工及部门名称select e.ename, d.dnamefrom emp e, dept dwhere e.job in (select e2.job from emp e2 where e2.ename = 'SCOTT') and e.deptno = d.deptno;--11.列出薪金等于部门20中的员工的薪金的所有员工和薪金select *from empwhere sal in (select e.sal from emp e where e.deptno = 20);--12.列出薪金高于部门30中的员工的薪金的所有员工和薪金,部门名称select e2.ename, e2.sal, d.dnamefrom emp e2, dept dwhere sal >(select max(t1.sal)from (select e.sal from emp e where e.deptno = 30) t1)and d.deptno = e2.deptno;--13.列出每个部门员工的数量,平均工资和平均年限select t2.*, t1.ro3 平均年限from (select e2.deptno, count(*) 员工数量, avg(e2.sal) 平均工资from emp e2group by e2.deptno) t2,(select ro2.deptno, avg(ro2.ro) ro3 from (select e3.deptno,round(months_between(sysdate, e3.hiredate) / 12) rofrom emp e3) ro2group by ro2.deptno) t1where t1.deptno = t2.deptno; --14.列出所有员工的姓名,工资,部门名称select e.ename, e.sal, d.dname from emp e, dept dwhere d.deptno = e.deptno; --15.列出所有部门信息和部门人数select d.*, nvl(t1.c, 0) 部门人数from dept dleft outer join (select e.deptno, count(e.deptno) cfrom emp egroup by e.deptno) t1on d.deptno = t1.deptno;--16.列出各种工作的最低工薪以及从事此工作的员工信息select *from emp, (select e.job j, min(e.sal) s from emp e group by e.job) t1where emp.job = t1.jand emp.sal = t1.s;--17.列出各个部门职位为'MANAGER'(经理)的最低工薪select a.dname, min(a.sal) from (select d.dname, e.sal from emp e, dept dwhere e.deptno = d.deptno and e.job = 'MANAGER') agroup by a.dname;--18.列出所有员工的年薪,按照年薪由低到高排序select e.ename, e.sal * 12 from emp e order by e.sal;--19.查出每个员工的上级领导,并且求出这些主管的工资超过3000 select e1.ename 本人姓名, e2.ename 领导姓名, e2.sal 领导工资 from emp e1, emp e2where e1.mgr = e2.empnoand e2.sal > 3000;--20.求出部门名称中带有'S'的部门员工的工资合计,部门人数 selectd.dname 部门名称, t2.su 工资合计, t2.co 部门人数 from (selecte.deptno, sum(e.sal) su, count(e.empno) cofrom emp egroup by e.deptno) t2,dept dwhere t2.deptno in (select d.deptno from dept d where d.dname like '%S%')and d.deptno = t2.deptno; --21.给任职日期超过10年的员工加薪10% update empset sal = sal * 1.1where empno in (select t1.empno from (select e.empno,round(months_between(sysdate, e.hiredate) / 12) rofrom emp e) t1where t1.ro > 10);--1.列出所有雇员的姓名及其上级的姓名select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr =e2.empno;--2.列出入职日期早于其直接上级的所有雇员select e1.empno 员工号,e1.ename 员工姓名,e1.hiredate 入职日期,e2.ename 上级姓名,e2.hiredate 上级入职日期from emp e1, emp e2where e1.mgr = e2.empno and e1.hiredate < e2.hiredate; --3.列出所有"CLERK"(办事员)的姓名及其部门名称 select e.ename, d.dname from emp e, dept dwhere e.deptno = d.deptno and e.job = 'CLERK';--4.列出各种工作类型的最低薪金,并使最低薪金大于1500 select e.job, min(e.sal)from emp egroup by e.jobhaving min(e.sal) > 1500; --5.查询从事"SALES"(销售)工作的雇员的姓名(假定不知道销售部的部门编号) select e.ename from emp e where e.job ='SALESMAN';--6.列出从事同一种工作但属于不同部门的雇员的不同组合 select distinct e.job, d.dname from emp e, dept dwhere e.deptno = d.deptno order by job;--7.列出各个部门的MANAGER(经理)的最低薪金select a.dname, min(a.sal) from (select d.dname, e.sal from emp e, dept dwhere e.deptno = d.deptno and e.job = 'MANAGER') a group by a.dname;--8.列出部门号为20和30的雇员名称,部门名称和薪金 select e.ename,e.sal, d.dname from emp e, dept dwhere (e.deptno in (20, 30)) and e.deptno = d.deptno; --9.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面(拓展:查询那个最老雇员的信息) select e.ename, e.hiredate from emp e order by e.hiredate; selectb.ename, b.empno, b.dname, b.job, b.hiredatefrom (select rownum as rn, a.*from (select e.ename, e.empno, d.dname, e.job, e.hiredate from emp e, dept dwhere e.deptno = d.deptnoorder by e.hiredate) a) bwhere b.rn = 1--10.查找EMP表中前10条记录select * from emp where rownum < 11;--11.查找EMP表中7条以后的记录select a.* from (select e.*, rownum as rn from emp e) a where a.rn > 7; --12.列出薪金水平处于第二位的雇员select *from (select dense_rank() over(order by sal desc) rk, e.* from emp e) t where t.rk = 2;--13.查找EMP表中薪水第6高的员工select *from (select dense_rank() over(order by sal desc) rk, e.* from emp e) t where t.rk = 6;--14.查找EMP表中每部门薪水第3的员工select *from (select dense_rank() over(partition by deptno order by sal desc) rk, e.*from emp e) twhere t.rk = 3;--15.各月最后受雇的所有雇员/*根据每个月的雇佣日期排序(逆序)select dense_rank() over(partition by m order by d desc) rk, t1.* from (select e.empno,extract(month from e.hiredate) m, extract(day from e.hiredate) dfrom emp e) t1*/select *from empwhere emp.empno in (select t2.empno from (select dense_rank() over(partition by m order by d desc) rk,t1.*from (select e.empno,extract(month from e.hiredate) m, extract(day from e.hiredate) d from emp e) t1) t2where t2.rk = 1);--16、查询薪金高于公司平均水平的所有雇员select * from emp where sal > (select avg(sal) from emp);--17、列出薪金等于在部门30工作的所有雇员的姓名和薪金select *from empwhere sal in (select e.sal from emp e where e.deptno = 30);--18.查询出没有员工的部门的部门编号和部门名称select d.deptno, d.dnamefrom dept dwhere d.deptno not in (select distinct deptno from emp);--19.查询出平均工资最高的部门编号、部门名称和平均工资select d.deptno 部门编号, d.dname 部门名称, t3.av 平均工资from (select t2.deptno, t2.avfrom (select t1.*, dense_rank() over(order by t1.av desc) rkfrom (select e.deptno, avg(sal) avfrom emp egroup by e.deptno) t1) t2where t2.rk = 1) t3,dept dwhere t3.deptno = d.deptno;--20.查找EMP表部门30中薪水第3的员工select t1.*from (select dense_rank() over(partition by e.deptno order by e.sal) rk,e.*from emp e) t1where t1.rk = 3and t1.deptno = 30;。

dbswitch 同步表结构代码

dbswitch 同步表结构代码

dbswitch 同步表结构代码1. 任务背景在数据库开发和维护过程中,经常需要在不同的数据库之间进行数据同步和迁移。

其中一个重要的任务就是同步表结构代码,即将一个数据库中的表结构定义复制到另一个数据库中。

这样可以确保两个数据库之间的表结构一致,方便数据的迁移和操作。

2. 任务目标本次任务的目标是编写一个能够实现数据库表结构同步的代码,即将一个数据库中的表结构定义复制到另一个数据库中。

具体要求如下: - 支持主流的关系型数据库,如MySQL、Oracle、SQL Server等; - 能够自动识别源数据库中的表结构,并生成与之对应的目标数据库的表结构定义; - 考虑到源数据库和目标数据库可能存在差异,需要处理差异,确保表结构的一致性; - 提供可配置的选项,方便根据实际需求进行定制化设置。

3. 实现思路为了实现表结构的同步,可以采用以下步骤: 1. 连接源数据库和目标数据库,并获取数据库的表结构信息; 2. 比较源数据库和目标数据库的表结构,找出差异;3. 根据差异生成同步脚本,包括创建表、修改表和删除表等操作;4. 执行同步脚本,将源数据库的表结构同步到目标数据库。

4. 代码实现4.1 连接数据库首先,需要编写代码连接源数据库和目标数据库。

可以使用数据库客户端提供的API,如JDBC、ODBC等。

具体的连接方式和参数可以根据数据库类型进行设置。

import pymysql# 连接源数据库source_conn = pymysql.connect(host='localhost', port=3306, user='root', passwo rd='password', database='source_db')# 连接目标数据库target_conn = pymysql.connect(host='localhost', port=3306, user='root', passwo rd='password', database='target_db')4.2 获取表结构信息接下来,需要编写代码获取源数据库和目标数据库的表结构信息。

oracle初学者必备_scott用户脚本创建及表结构及函数练习实例

oracle初学者必备_scott用户脚本创建及表结构及函数练习实例

oracle初学者必备_scott用户脚本创建及表结构及函数练习实例Oracle数据库的Scott用户创建脚本---- Copyright (c) Oracle Corporation 1988, 2000. All Rights Reserved. ---- NAME-- demobld.sql---- DESCRIPTION-- This script creates the SQL*Plus demonstration tables in the-- current schema. It should be STARTed by each user wishing to-- access the tables. To remove the tables use the demodrop.sql-- script.---- USAGE-- From within SQL*Plus, enter:-- START demobld.sqlSET TERMOUT ONPROMPT Building demonstration tables. Please wait. SET TERMOUT OFF DROP TABLE EMP;DROP TABLE DEPT;DROP TABLE BONUS;DROP TABLE SALGRADE;DROP TABLE DUMMY;CREATE TABLE EMP(EMPNO NUMBER(4) NOT NULL,ENAME VARCHAR2(10),JOB VARCHAR2(9),MGR NUMBER(4),HIREDATE DATE,SAL NUMBER(7, 2),COMM NUMBER(7, 2),DEPTNO NUMBER(2));INSERT INTO EMP VALUES(7369, 'SMITH', 'CLERK', 7902,TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20);INSERT INTO EMP VALUES(7499, 'ALLEN', 'SALESMAN', 7698,TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30); INSERT INTO EMP VALUES(7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30); INSERT INTO EMP VALUES(7566, 'JONES', 'MANAGER', 7839,TO_DATE('2-APR-1981', 'DD-MON-YYYY'), 2975, NULL, 20); INSERT INTO EMP VALUES(7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30); INSERT INTO EMP VALUES(7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30); INSERT INTO EMP VALUES(7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10); INSERT INTO EMP VALUES(7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20); INSERT INTO EMP VALUES(7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10); INSERT INTO EMP VALUES(7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30); INSERT INTO EMP VALUES(7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20); INSERT INTO EMP VALUES(7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30); INSERT INTO EMP VALUES(7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20); INSERT INTO EMP VALUES(7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10);CREATE TABLE DEPT(DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13) );INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO DEPT VALUES (40, 'OPERATIONS','BOSTON');CREATE TABLE BONUS(ENAME VARCHAR2(10),JOB VARCHAR2(9),SAL NUMBER,COMM NUMBER);CREATE TABLE SALGRADE(GRADE NUMBER,LOSAL NUMBER,HISAL NUMBER);INSERT INTO SALGRADE VALUES (1, 700, 1200); INSERT INTO SALGRADE VALUES (2, 1201, 1400); INSERT INTO SALGRADE VALUES (3, 1401, 2000);INSERT INTO SALGRADE VALUES (4, 2001, 3000); INSERT INTO SALGRADE VALUES (5, 3001, 9999);CREATE TABLE DUMMY(DUMMY NUMBER);INSERT INTO DUMMY VALUES (0);COMMIT;SET TERMOUT ONPROMPT Demonstration table build is complete.EXITSCOTT用户四张表结构表一:部门表DEPT(使用DESC DEPT;查询)名称类型描述 NO表示部门编号有两位数字所组成 1 DEPTNO NUMBER(2)VARCHAR2(14) 表示部门名称最多由14个字符所组成 2 DNAMEVARCHAR2(13) 表示部门所在位置 3 LOC(SELECT * FROM DEPT;)NO DEPTNO DNAME LOCACCOUNTING(财NEWYORK(纽约) 1 10务部,会计部)RESEARCH(调研DALLAS(达拉斯) 2 20部)SALES(营业部,市CHICAGO(芝加哥) 3 30场部)OPERATIONS(运营BOSTON(波士顿) 4 40部)表二:雇员表EMP(使用DESC EMP;查询)名称类型描述NUMBER(4) 表示雇员编号,由四个数字组成 EMPNO VARCHAR2(10) 表示雇员姓名,由10个字符组成 ENAME VARCHAR2(9) 表示雇员的职位,由9个字符组成 JOB NUMBER(4) 表示雇员对应的领导编号,领导也是雇员 MGR表示雇员的雇佣日期 HIREDATE DATENUMBER(7,2) 表示雇员的基本工资,由两位小数5位整数SAL 和2位小数组成,共7位NUMBER(7,2) 表示雇员的奖金 COMMNUMBER(2) 表示雇员所在部门的编号 DEPTNO(SELECT * FROM EMP;)NO EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO CLERK(办17-12月-80 1 7369 SMITH7902 800 20(史密事员)斯)20-2月-81 2 7499 ALLENSALESMAN7698 1600 300 30(艾伦) (销售员)22-2月-81 3 7521 WARD SALESMAN 7698 1250 500 30(沃德)02-4月-81 4 7566 JONES MANAGER7839 2975 20(琼斯) (经理主管)28-9月-81 5 7654 MARTINSALESMAN 7698 1250 1400 30()马丁01-5月-81 6 7698 BLAKE MANAGER 7839 2850 30 (布雷克)09-6月-81 7 7782 CLARKMANAGER 7839 2450 10(克拉克)19-4月-87 8 7788 SCOTTANALYST7566 3000 20(斯科(分析员)特)17-11月-81 9 7839 KINGPRESIDENT 5000 10(金) (总经理,总裁)08-9月-81 10 7844 TURNERSALESMAN 7698 1500 0 30 (特纳)23-5月-87 11 7876 ADANSCLERK 7788 1100 20(奥丹斯)03-12月-81 12 7900 JAMESCLERK 7698 950 30(詹姆斯)03-12月-81 13 7902 FORDANALYST 7566 3000 20 (福特)23-1月-82 14 7934 MILLERCLERK 7782 1300 10(米勒)表三:工资等级表:(DESC SALGRADE)名称类型描述 NO工资的等级 1 GRADE NUMBER此等级的最低工资 2 LOSAL NUMBER此等级的最高工资 3 HISAL NUMBER(SELECT * FROM SALGRADE;查询)NO GRADE LOSAL HISAL 1 1 700 1200 2 2 1201 1400 3 3 1401 2000 4 4 2001 3000 5 5 3001 9999表四:工资表BONUS:(DESC BONUS)名称类型描述 NOVARCHAR2(10) 雇员姓名 1 ENAME雇员职位 2 JOB VARCHAR2(9)雇员基本工资 3 SAL NUMBER奖金,提成 4 COMM NUMBERSCOTT用户语句与函数练习--1.列出至少有一个员工的所有部门select d.dname, t1.cofrom (select e.deptno, count(e.deptno) co from emp e group bye.deptno) t1,dept dwhere d.deptno = t1.deptno and t1.co > 1;--2.列出薪金比‘SMITH’多的所有员工select *from empwhere sal > (select e.sal from emp e where e.ename = 'SMITH');--3.列出所有员工的姓名以及直接上级的姓名select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr =e2.empno;--4.列出受雇日期早于直接上级入职日期的职工编号,姓名,部门名称select e1.empno 员工号,e1.ename 员工姓名,e1.hiredate 入职日期,e2.ename 上级姓名,e2.hiredate 上级入职日期from emp e1, emp e2where e1.mgr = e2.empnoand e1.hiredate < e2.hiredate; --5.列出部门名称和这些部门的员工信息,同时列出没有员工的部门信息 select d.dname, e.*from emp eright outer join dept don e.deptno = d.deptnoorder by d.dname;--6.列出所有职位为'CLERK'的姓名和部门名称,部门人数select e.ename, d.dnamefrom emp e, dept dwhere e.deptno = d.deptnoand e.job = 'CLERK';--7.列出最低工薪大于1500的各种工作以及从事此工作的全部雇员的人数select distinct e.job, count(*) from emp ewhere e.sal > 1500group by e.job;--8.列出在部门'SALES'(销售部)工作的员工信息,假设不知道销售部门的部门号 select e.ename from emp e where e.job = 'SALESMAN';--9.列出薪金高于公司平均薪金的所有员工,部门,上级领导,工资级别 select e2.ename, e2.deptno, e3.ename, s.gradefrom emp e2, emp e3, salgrade swhere e2.sal > (select avg(e.sal) from emp e) and (e2.sal between s.losal and s.hisal) and e2.mgr = e3.empno;--10.列出与'SCOTT'从事相同工作的所有员工及部门名称select e.ename, d.dnamefrom emp e, dept dwhere e.job in (select e2.job from emp e2 where e2.ename = 'SCOTT') and e.deptno = d.deptno;--11.列出薪金等于部门20中的员工的薪金的所有员工和薪金select *from empwhere sal in (select e.sal from emp e where e.deptno = 20);--12.列出薪金高于部门30中的员工的薪金的所有员工和薪金,部门名称select e2.ename, e2.sal, d.dnamefrom emp e2, dept dwhere sal >(select max(t1.sal)from (select e.sal from emp e where e.deptno = 30) t1)and d.deptno = e2.deptno;--13.列出每个部门员工的数量,平均工资和平均年限select t2.*, t1.ro3 平均年限from (select e2.deptno, count(*) 员工数量, avg(e2.sal) 平均工资from emp e2group by e2.deptno) t2,(select ro2.deptno, avg(ro2.ro) ro3 from (select e3.deptno,round(months_between(sysdate, e3.hiredate) / 12) rofrom emp e3) ro2group by ro2.deptno) t1where t1.deptno = t2.deptno; --14.列出所有员工的姓名,工资,部门名称select e.ename, e.sal, d.dname from emp e, dept dwhere d.deptno = e.deptno; --15.列出所有部门信息和部门人数select d.*, nvl(t1.c, 0) 部门人数from dept dleft outer join (select e.deptno, count(e.deptno) cfrom emp egroup by e.deptno) t1on d.deptno = t1.deptno;--16.列出各种工作的最低工薪以及从事此工作的员工信息select *from emp, (select e.job j, min(e.sal) s from emp e group by e.job) t1where emp.job = t1.jand emp.sal = t1.s;--17.列出各个部门职位为'MANAGER'(经理)的最低工薪select a.dname, min(a.sal) from (select d.dname, e.sal from emp e, dept dwhere e.deptno = d.deptno and e.job = 'MANAGER') agroup by a.dname;--18.列出所有员工的年薪,按照年薪由低到高排序select e.ename, e.sal * 12 from emp e order by e.sal;--19.查出每个员工的上级领导,并且求出这些主管的工资超过3000 select e1.ename 本人姓名, e2.ename 领导姓名, e2.sal 领导工资 from emp e1, emp e2where e1.mgr = e2.empnoand e2.sal > 3000;--20.求出部门名称中带有'S'的部门员工的工资合计,部门人数 selectd.dname 部门名称, t2.su 工资合计, t2.co 部门人数 from (selecte.deptno, sum(e.sal) su, count(e.empno) cofrom emp egroup by e.deptno) t2,dept dwhere t2.deptno in (select d.deptno from dept d where d.dname like '%S%')and d.deptno = t2.deptno; --21.给任职日期超过10年的员工加薪10% update empset sal = sal * 1.1where empno in (select t1.empno from (select e.empno,round(months_between(sysdate, e.hiredate) / 12) rofrom emp e) t1where t1.ro > 10);--1.列出所有雇员的姓名及其上级的姓名select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr =e2.empno;--2.列出入职日期早于其直接上级的所有雇员select e1.empno 员工号,e1.ename 员工姓名,e1.hiredate 入职日期,e2.ename 上级姓名,e2.hiredate 上级入职日期from emp e1, emp e2where e1.mgr = e2.empno and e1.hiredate < e2.hiredate; --3.列出所有"CLERK"(办事员)的姓名及其部门名称 select e.ename, d.dname from emp e, dept dwhere e.deptno = d.deptno and e.job = 'CLERK';--4.列出各种工作类型的最低薪金,并使最低薪金大于1500 select e.job, min(e.sal)from emp egroup by e.jobhaving min(e.sal) > 1500; --5.查询从事"SALES"(销售)工作的雇员的姓名(假定不知道销售部的部门编号) select e.ename from emp e where e.job ='SALESMAN';--6.列出从事同一种工作但属于不同部门的雇员的不同组合 select distinct e.job, d.dname from emp e, dept dwhere e.deptno = d.deptno order by job;--7.列出各个部门的MANAGER(经理)的最低薪金select a.dname, min(a.sal) from (select d.dname, e.sal from emp e, dept dwhere e.deptno = d.deptno and e.job = 'MANAGER') a group by a.dname;--8.列出部门号为20和30的雇员名称,部门名称和薪金 select e.ename,e.sal, d.dname from emp e, dept dwhere (e.deptno in (20, 30)) and e.deptno = d.deptno; --9.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面(拓展:查询那个最老雇员的信息) select e.ename, e.hiredate from emp e order by e.hiredate; selectb.ename, b.empno, b.dname, b.job, b.hiredatefrom (select rownum as rn, a.*from (select e.ename, e.empno, d.dname, e.job, e.hiredate from emp e, dept dwhere e.deptno = d.deptnoorder by e.hiredate) a) bwhere b.rn = 1--10.查找EMP表中前10条记录select * from emp where rownum < 11;--11.查找EMP表中7条以后的记录select a.* from (select e.*, rownum as rn from emp e) a where a.rn > 7; --12.列出薪金水平处于第二位的雇员select *from (select dense_rank() over(order by sal desc) rk, e.* from emp e) t where t.rk = 2;--13.查找EMP表中薪水第6高的员工select *from (select dense_rank() over(order by sal desc) rk, e.* from emp e) t where t.rk = 6;--14.查找EMP表中每部门薪水第3的员工select *from (select dense_rank() over(partition by deptno order by sal desc) rk, e.*from emp e) twhere t.rk = 3;--15.各月最后受雇的所有雇员/*根据每个月的雇佣日期排序(逆序)select dense_rank() over(partition by m order by d desc) rk, t1.* from (select e.empno,extract(month from e.hiredate) m, extract(day from e.hiredate) dfrom emp e) t1*/select *from empwhere emp.empno in (select t2.empno from (select dense_rank() over(partition by m order by d desc) rk,t1.*from (select e.empno,extract(month from e.hiredate) m, extract(day from e.hiredate) d from emp e) t1) t2where t2.rk = 1);--16、查询薪金高于公司平均水平的所有雇员select * from emp where sal > (select avg(sal) from emp);--17、列出薪金等于在部门30工作的所有雇员的姓名和薪金select *from empwhere sal in (select e.sal from emp e where e.deptno = 30);--18.查询出没有员工的部门的部门编号和部门名称select d.deptno, d.dnamefrom dept dwhere d.deptno not in (select distinct deptno from emp);--19.查询出平均工资最高的部门编号、部门名称和平均工资select d.deptno 部门编号, d.dname 部门名称, t3.av 平均工资from (select t2.deptno, t2.avfrom (select t1.*, dense_rank() over(order by t1.av desc) rkfrom (select e.deptno, avg(sal) avfrom emp egroup by e.deptno) t1) t2where t2.rk = 1) t3,dept dwhere t3.deptno = d.deptno;--20.查找EMP表部门30中薪水第3的员工select t1.*from (select dense_rank() over(partition by e.deptno order by e.sal) rk,e.*from emp e) t1where t1.rk = 3and t1.deptno = 30;。

油猴脚本编写教程详解

油猴脚本编写教程详解

油猴脚本编写教程详解1.什么是油猴脚本?油猴脚本是一种用户脚本管理器,通过它可以在浏览器中自定义网页的行为和外观。

使用油猴脚本可以对网页进行修改、自动化以及添加新的功能和特性。

2.油猴脚本的安装首先,你需要安装一个油猴脚本管理器插件,例如在Google Chrome 浏览器上可以使用Tampermonkey插件,在Firefox浏览器上可以使用Greasemonkey插件。

安装完插件后,浏览器的工具栏上会出现一个油猴脚本的图标。

3.创建一个新的油猴脚本点击浏览器工具栏上的油猴脚本图标,选择“新建用户脚本”,就可以创建一个新的油猴脚本。

4.脚本代码结构油猴脚本主要由三个部分组成:元数据块、启动代码和脚本逻辑。

元数据块示例:// ==UserScript==// ==/UserScript==启动代码示例:(functio'use strict';//在这里插入你的代码})(;脚本逻辑示例:// ==UserScript==// ==/UserScript==(functio'use strict';//在这里插入你的代码document.body.innerHTML = 'Hello, World!';})(;5.获取和修改页面元素你可以使用document对象来获取和修改页面元素。

例如,以下代码将会修改页面的标题:document.title = '新标题';6.监听页面事件你可以使用addEventListener函数来监听页面事件,例如点击事件、滚动事件等。

以下示例代码监听了页面的点击事件,并将点击位置的坐标打印出来:document.addEventListener('click', function(event)console.log('点击位置的坐标:', event.clientX,event.clientY);});7.发送HTTP请求你可以使用XMLHttpRequest对象或fetch函数来发送HTTP请求获取数据。

java 获取pg数据库建表语句

java 获取pg数据库建表语句

java 获取pg数据库建表语句下面是使用Java获取PG数据库建表语句的示例,共计10个示例。

示例1:创建用户表```javaString createT ableSQL = "CREATE TABLE users ("+ "id SERIAL PRIMARY KEY,"+ "username VARCHAR(50) NOT NULL,"+ "password VARCHAR(50) NOT NULL,"+ "email VARCHAR(100) NOT NULL,"+ "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);";```该示例演示了创建一个名为"users"的表,包含id、username、password、email和created_at五个字段,其中id为自增主键,其他字段都不能为空。

示例2:创建商品表```javaString createT ableSQL = "CREATE TABLE products ("+ "id SERIAL PRIMARY KEY,"+ "name VARCHAR(100) NOT NULL,"+ "price DECIMAL(10,2) NOT NULL,"+ "description TEXT,"+ "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);";```该示例创建了一个名为"products"的表,包含id、name、price、description和created_at五个字段,其中id为自增主键,name 和price字段不能为空,description字段为文本类型。

获取Lua表结构(table)数据实例

获取Lua表结构(table)数据实例

获取Lua表结构(table)数据实例只是获取⼀个全局变量什么的太没意思了,今天我们来玩个⾼难度的——获取Lua表结构的数据。

(旁⽩:O O!我是不是该说点什么?)1. 什么是tabletable是Lua⾥最强⼤的数据类型,我们可以当成是数组,但是它⼜和数组有点不⼀样,建议⼤家看看Lua的语法教程,因为我对table也没有熟悉到可以给⼤家解释的程度。

(旁⽩:那你还写什么教程。

)2. 获取table变量现在,我们给helloLua.lua⽂件添加⼀个table全局变量:复制代码代码如下:-- helloLua.lua⽂件myName = "beauty girl"helloTable = {name = "mutou", IQ = 125}我们看到,多了⼀个helloTable的变量,它和数组⼗分相似,⼜和HashMap有点类似,总之它很强⼤。

(旁⽩:我觉得亮点是,你的IQ有125?我觉得乘以2的话,还有点可能~!)话说,125乘以2等于多少?…250 ….O O!获取helloTable变量的⽅式和以前是⼀样的:复制代码代码如下:/* 取得table变量,在栈顶 */lua_getglobal(pL, "helloTable");这样,helloTable变量就被存放到栈顶。

可我们并不是要取table变量,因为C++中是⽆法识别Lua的table类型的,所以我们要取得table中具体的值,也就是name和IQ 的值。

3. lua_gettable函数有⼀个和lua_getglobal类似的函数,叫做lua_gettable,顾名思义,它是⽤来取得table相关的数据的。

(旁⽩:废话少点好吧= =)lua_gettable函数会从栈顶取得⼀个值,然后根据这个值去table中寻找对应的值,最后把找到的值放到栈顶。

lua_pushstring()函数可以把C++中的字符串存放到Lua的栈⾥;然后再⽤lua_gettable()取执⾏前⾯所说的步骤,lua_gettable的第⼆个参数是指定的table变量在栈中的索引。

dbeaver导出表结构

dbeaver导出表结构

dbeaver导出表结构标题:使用DBeaver导出表结构的简易指南导出表结构是数据库管理和开发过程中常见的任务之一。

DBeaver是一款功能强大的开源数据库工具,它提供了许多方便的功能,包括导出表结构。

本文将向您介绍如何使用DBeaver轻松地导出表结构。

第一步:安装和配置DBeaver\n首先,您需要下载并安装DBeaver。

它支持多种操作系统,包括Windows、Mac和Linux。

安装完成后,打开DBeaver并配置您要连接的数据库。

第二步:连接到数据库\n在DBeaver中,选择“新建连接”来创建一个新的数据库连接。

根据您使用的数据库类型选择相应的驱动程序,并填写必要的连接信息,如主机名、端口号、用户名和密码等。

点击“测试连接”来确保连接成功。

第三步:选择要导出的表\n在成功连接到数据库后,在左侧面板中展开相应的数据库节点,并找到您想要导出表结构的数据库。

展开该节点后,您将看到所有可用的表。

选择您想要导出结构的表。

第四步:导出表结构\n在选中要导出结构的表后,右键单击该表并选择“工具”>“生成DDL”。

这将打开一个新窗口,在该窗口中您可以定义导出选项。

在DDL生成器窗口中,您可以选择导出的对象类型,如表、索引、触发器等。

您还可以选择导出的格式,如SQL脚本、HTML或XML。

根据您的需求选择适当的选项。

此外,您还可以定义导出文件的位置和名称。

点击“运行”按钮开始导出过程。

第五步:查看和保存导出结果\n一旦导出过程完成,您将在DDL生成器窗口中看到生成的DDL脚本。

您可以在此窗口中查看和检查脚本。

如果您满意结果并希望保存脚本到本地文件,点击“保存”按钮并选择适当的位置和名称。

结论:\n使用DBeaver导出表结构是一项简单而强大的任务。

通过按照上述步骤连接到数据库、选择要导出的表、定义导出选项并保存结果,您可以轻松地完成这个任务。

无论是为了备份数据库结构、与团队成员共享表结构信息还是进行数据库版本控制,DBeaver提供了一个方便且可靠的解决方案。

desc查看数据库创建语句

desc查看数据库创建语句

desc查看数据库创建语句如何查看数据库的创建语句在数据库管理系统中,数据库的创建语句是用来定义和描述数据库结构的,包括表、字段、索引等信息。

通过查看数据库的创建语句,可以了解数据库的结构和组成,并且可以方便地备份和恢复数据库。

下面是一步一步回答如何查看数据库的创建语句的方法:步骤1:连接到数据库管理系统首先,我们需要连接到数据库管理系统。

常见的数据库管理系统包括MySQL、Oracle、SQL Server等。

根据具体的系统,选择相应的连接方式,并提供正确的用户名和密码进行连接。

连接成功后,我们可进入数据库管理系统的命令行或图形界面。

步骤2:选择数据库在连接成功后,我们需要选择要查看创建语句的数据库。

在大多数数据库管理系统中,可以通过执行以下命令来选择数据库:USE <database_name>其中,`<database_name>` 是要查看的数据库的名称。

执行该命令后,我们将进入到该数据库的环境。

步骤3:获取创建语句接下来,我们可以使用不同的方法获取数据库的创建语句。

下面将介绍几种常见的方法:方法1:使用数据库管理系统的命令很多数据库管理系统都提供了特定的命令来获取数据库的创建语句。

以下是一些示例:- MySQL:可以使用`SHOW CREATE DATABASE <database_name>` 命令来获取数据库的创建语句。

执行该命令后,将返回一个包含创建语句的结果集。

- Oracle:可以通过执行`DBMS_METADATA.GET_DDL('TABLESPACE','<tablespace_name>')` 命令来获取表空间创建语句。

- SQL Server:可以使用`Script Database as` 功能来生成整个数据库的创建脚本。

在SQL Server Management Studio 中,选择要查看的数据库,右键点击,选择`Tasks`->`Generate Scripts`,然后按照向导选择相应的选项即可。

show create table 语句

show create table 语句

show create table 语句
`SHOW CREATE TABLE` 是一个SQL 语句,用于显示创建表的SQL 语句。

这个语句在MySQL 数据库中特别有用,因为它允许你查看表的完整定义,包括列名、数据类型、索引、约束等。

使用`SHOW CREATE TABLE` 的基本语法如下:
sql
SHOW CREATE TABLE 表名;
例如,如果你有一个名为`employees` 的表,你可以这样查询:
sql
SHOW CREATE TABLE employees;
执行这个语句后,你会得到一个结果集,其中包含一个字符串列`Create Table`,里面包含了创建这个表的完整SQL 语句。

注意:不是所有的数据库系统都支持`SHOW CREATE TABLE` 语句。

例如,在PostgreSQL 或SQLite 中,你可能需要使用其他方法来获取表的创建语句。

SQL获取表结构的show_table.vbs(冰点极限NP)

SQL获取表结构的show_table.vbs(冰点极限NP)

SQL获取表结构的show_table.vbs(冰点极限NP)复制代码代码如下:set arg=wscript.argumentsIf arg.count = 0 Thenshow_help()wsh.quitEnd IfServer = arg(0)User = arg(1)pass = arg(2)database_name = arg(3)table_name = arg(4)set Conn = CreateObject("ADODB.Connection")Conn.Open "Driver={SQL Server};Server=" & Server & ";UID=" & User & ";PWD=" & Pass & ";Database=" & database_name Set rs = conn.execute("select count(*) as n from " & database_name & ".dbo.sysobjects where id = object_id(N'[dbo].[" & table_name & "]')")if rs("n") <=0 Thenwsh.echo "table have"wsh.quitEnd Ifsql1="use " &database_name & ";select count(column_name) from information_schema.columns where table_name='" & table_name & "'"set rs1=conn.execute(sql1)num = rs1(0)rs1.closeSet rs1 = Nothingi = 1sql2="use " &database_name & ";selectcolumn_name,data_type,IS_NULLABLE,character_octet_length,collation_name,domain_name frominformation_schema.columns where table_name='" & table_name & "' order by ordinal_position"'wsh.echo sql2set rs2=conn.execute (sql2)wsh.echo "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[" & table_name & "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)"wsh.echo "drop table [dbo].[" & table_name & "]"wsh.echo "GO"wsh.echo "CREATE TABLE [dbo].[" & table_name & "] ("do while not rs2.eofcol_dn = rs2("domain_name")col_name = rs2("column_name")col_type = rs2("data_type")col_len = rs2("character_octet_length")col_an = rs2("collation_name")col_is = rs2("IS_NULLABLE")sql = chr(9)&"[" & col_name & "] "If col_dn = "id" Thensql = sql & col_dn &" "Elsesql = sql & "[" & col_type & "] "If col_len <> "" Thensql = sql & "(" & col_len & ") "End IfIf col_an <> "" Thensql = sql & "COLLATE " & col_anEnd IfEnd IfIf col_is = "No" Thensql = sql & " NOT NULL "Elsesql = sql & " NULL "End IfIf i = num Thensql = sql & Chr(13)&Chr(10)&") ON [PRIMARY]"Elsesql = sql & ","End Ifi = i +1wsh.echo sqlrs2.movenextloopwsh.echo "GO"rs2.closeSet rs2 = Nothingconn.closeSet conn=NothingSub show_help()wsh.echo "code by N37P47ch "wsh.echo "cscript show_table.vbs ip user pass database table" End Sub。

如何获取一个数据库的所有建表语句与创建索引的语句?

如何获取一个数据库的所有建表语句与创建索引的语句?

如何获取⼀个数据库的所有建表语句与创建索引的语句?如何获取⼀个数据库的所有建表语句与创建索引的语句?⽣成建表语句操作 SSMS中右击数据库-》⽣成脚本-》选择仅限架构利⽤T-SQL⽣成建表语句--⽣成当前数据库下所有表的创建脚本select'create table ['+ +'] ('+ o.list +')'+CASE WHEN tc.Constraint_Name IS NULL THEN''ELSE'ALTER TABLE '+ +' ADD CONSTRAINT '+ tc.Constraint_Name +' PRIMARY KEY '+' ('+LEFT(j.List, Len from sysobjects socross apply(SELECT' ['+column_name+'] '+data_type +case data_typewhen'sql_variant'then''when'text'then''when'decimal'then'('+cast(numeric_precision_radix as varchar) +', '+cast(numeric_scale as varchar) +')'else coalesce('('+case when character_maximum_length =-1then'MAX'else cast(character_maximum_length as varchar) end+')','') end+''+case when exists (select id from syscolumnswhere object_name(id)=and name=column_nameand columnproperty(id,name,'IsIdentity') =1) then'IDENTITY('+cast(ident_seed() as varchar) +','+cast(ident_incr() as varchar) +')'else''end+''+(case when IS_NULLABLE ='No'then'NOT 'else''end ) +'NULL '+case when information_schema.columns.COLUMN_DEFAULT IS NOT NULL THEN'DEFAULT '+ information_schema.columns.COLUMN_DEFAULT ELSE''END+', 'from information_schema.columns where table_name = order by ordinal_positionFOR XML PATH('')) o (list)left joininformation_schema.table_constraints tcon tc.Table_name = AND tc.Constraint_Type ='PRIMARY KEY'cross apply(select'['+ Column_Name +'], 'FROM information_schema.key_column_usage kcuWHERE kcu.Constraint_Name = tc.Constraint_NameORDER BYORDINAL_POSITIONFOR XML PATH('')) j (list)where xtype ='U'AND name NOT IN ('dtproperties')View Code⽣成表索引创建、删除语句--⽣成表索引的创建删除语句;WITH TBAS ( SELECT TB.object_id ,Schema_name = ,table_name = FROM sys.tables TBINNER JOIN sys.schemas Sch ON TB.schema_id = Sch.schema_idWHERE TB.is_ms_shipped =0),IXCAS ( SELECT IXC.object_id ,IXC.index_id ,IXC.index_column_id ,IXC.is_descending_key ,IXC.is_included_column ,column_name = FROM SYS.index_columns IXCINNER JOIN SYS.columns C ON IXC.object_id= C.object_idAND IXC.column_id = C.column_id),IXAS ( SELECT IX.object_id ,index_name = ,index_type_desc = IX.type_desc ,IX.is_unique ,IX.is_primary_key ,IX.is_unique_constraint ,IX.is_disabled ,index_columns_TEMP =STUFF(IXC_COL.index_columns, 1, 1,N'') ,index_columns =CASE WHEN IXC_COL_INCLUDE.index_columns_includes IS NOT NULLTHEN STUFF(LEFT(IXC_COL.index_columns,DATALENGTH(IXC_COL.index_columns)-DATALENGTH(IXC_COL_INCLUDE.index_columns_includes)),1, 1, N'')ELSE STUFF(IXC_COL.index_columns,1, 1, N'')END ,index_columns_includes =STUFF(IXC_COL_INCLUDE.index_columns_includes,1, 1, N'')FROM sys.indexes IXCROSS APPLY ( SELECT index_columns = ( SELECTN','+QUOTENAME(column_name)FROMIXCWHEREobject_id= IX.object_idAND index_id = IX.index_idORDER BY index_column_idFOR XML PATH('') ,ROOT('r') ,TYPE).value('/r[1]', 'nvarchar(max)')) IXC_COLOUTER APPLY ( SELECT index_columns_includes = ( SELECTN','+QUOTENAME(column_name)FROMIXCWHEREobject_id= IX.object_idAND index_id = IX.index_idAND is_included_column =1ORDER BY index_column_idFOR XML PATH('') ,ROOT('r') ,TYPE).value('/r[1]', 'nvarchar(max)')) IXC_COL_INCLUDEWHERE index_id >0)SELECT DB_NAME() AS N'数据库名' ,TB.Schema_name AS N'架构' ,TB.table_name AS N'表名' ,IX.index_name AS N'索引名' ,IX.index_type_desc AS N'索引类型' ,IX.is_unique AS N'是否唯⼀索引' ,IX.is_primary_key AS N'是否主键' ,IX.is_unique_constraint AS N'是否唯⼀约束' ,IX.is_disabled AS N'是否禁⽤索引' ,IX.index_columns AS N'索引列' ,IX.index_columns_includes AS N'索引包含列' ,N'CREATE INDEX '+ N'['+ IX.index_name + N']'+ N' ON '+ N'['+QUOTENAME(DB_NAME()) + N'.'+QUOTENAME(TB.SCHEMA_NAME) + N'.'+QUOTENAME(TB.table_name) + N'('+ IX.index_columns + N')'+CASE WHEN IX.index_columns_includes IS NOT NULLTHEN CHAR(13) + N'INCLUDE ('+ IX.index_columns_includes+ N')'ELSE N''END AS N'创建索引' ,N'DROP INDEX '+QUOTENAME(IX.index_name) + N' ON '+QUOTENAME(DB_NAME()) + N'.'+QUOTENAME(TB.SCHEMA_NAME) + N'.'+QUOTENAME(TB.table_name) AS N'删除索引'FROM TBINNER JOIN IX ON TB.object_id= IX.object_idORDER BY Schema_name ,table_name ,IX.index_nameView Code查看表详情、数据字典--查看表的详细信息SELECT表名=CASE WHEN C.column_id =1THEN ELSE N''END ,表说明=ISNULL(CASE WHEN C.column_id =1THEN PTB.[value]END, N'') ,字段序号= C.column_id ,字段名= ,主键=ISNULL(IDX.PrimaryKey, N'') ,标识=CASE WHEN C.is_identity =1THEN N'√'ELSE N''END ,计算列=CASE WHEN C.is_computed =1THEN N'√'ELSE N''END ,类型= ,长度= C.max_length ,精度= C.precision ,⼩数位数= C.scale ,允许空=CASE WHEN C.is_nullable =1THEN N'√'ELSE N''END ,默认值=ISNULL(D.definition, N'') ,字段说明=ISNULL(PFD.[value], N'') ,索引名=ISNULL(IDX.IndexName, N'') ,索引排序=ISNULL(IDX.Sort, N'') ,创建时间= O.Create_Date ,修改时间= O.Modify_dateFROM sys.columns CINNER JOIN sys.objects O ON C.[object_id]= O.[object_id]AND O.type ='U'AND O.is_ms_shipped =0INNER JOIN sys.types T ON er_type_id = er_type_idLEFT JOIN sys.default_constraints D ON C.[object_id]= D.parent_object_idAND C.column_id = D.parent_column_idAND C.default_object_id = D.[object_id]LEFT JOIN sys.extended_properties PFD ON PFD.class =1AND C.[object_id]= PFD.major_idAND C.column_id = PFD.minor_id-- AND ='Caption' -- 字段说明对应的描述名称(⼀个字段可以添加多个不同name的描述) LEFT JOIN sys.extended_properties PTB ON PTB.class =1AND PTB.minor_id =0AND C.[object_id]= PTB.major_id-- AND ='Caption' -- 表说明对应的描述名称(⼀个表可以添加多个不同name的描述) LEFT JOIN-- 索引及主键信息( SELECT IDXC.[object_id] ,IDXC.column_id ,Sort =CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')WHEN1THEN'DESC'WHEN0THEN'ASC'ELSE''END ,PrimaryKey =CASE WHEN IDX.is_primary_key =1THEN N'√'ELSE N''END ,IndexName = FROM sys.indexes IDXINNER JOIN sys.index_columns IDXC ON IDX.[object_id]= IDXC.[object_id]AND IDX.index_id = IDXC.index_idLEFT JOIN sys.key_constraints KC ON IDX.[object_id]= KC.[parent_object_id]AND IDX.index_id = KC.unique_index_idINNER JOIN-- 对于⼀个列包含多个索引的情况,只显⽰第1个索引信息( SELECT[object_id] ,Column_id ,index_id =MIN(index_id)FROM sys.index_columnsGROUP BY[object_id] ,Column_id) IDXCUQ ON IDXC.[object_id]= IDXCUQ.[object_id]AND IDXC.Column_id = IDXCUQ.Column_idAND IDXC.index_id = IDXCUQ.index_id) IDX ON C.[object_id]= IDX.[object_id]AND C.column_id = IDX.column_id-- WHERE like '%name%'-- 如果只查询指定表,加上此条件ORDER BY ,C.column_idView Code。

sql 获取数据表创建语句

sql 获取数据表创建语句

sql 获取数据表创建语句
如果你想从一个数据库中获取一个数据表的创建语句,你可以使用SQL 的`SHOW CREATE TABLE` 语句。

以下是如何使用它的示例:```sql
SHOW CREATE TABLE your_table_name;
```
将`your_table_name` 替换为你想获取创建语句的表名。

执行上述SQL 语句后,你将得到一个结果集,其中包含两列:第一列是表名,第二列是创建该表的SQL 语句。

例如,如果你有一个名为`students` 的表,你可以这样做:
```sql
SHOW CREATE TABLE students;
```
这将返回一个结果集,其中包含创建`students` 表的完整SQL 语句。

注意:这个方法在MySQL 中特别有效。

如果你使用的是其他数据库系统,可能需要使用不同的方法来获取表的创建语句。

DB2导出表结构语句

DB2导出表结构语句

DB2导出表结构语句1.使⽤db2cmd打开db2命令⾏2.db2look -d db_name -e -a -x -i db_username -w db_passwd -0 file_name.sql #导出数据库结构3.db2move db_name export -u db_username -p db_passwd #导出数据库数据4. create database db_name on 'directory_name' using codeset utf-8 territory US collate using system; # IBM-eucJP --⼀种编码格式5.create schema sch_name authorization sch_passwd;#设置权限6.db2 connect to db_name user username using db_passwd #连接数据库7.db2 -tvf 'file_name'# -f 读取输⼊⽂件 -t 终⽌语句字符 -v 回送当前命令如果⽂件中每个语句是直接以回车结尾,则⽤-vf即可,加上-t是表⽰没条语句以";"结尾8.DB2数据库备份cmd--->db2cmd--->db2db stop force 防⽌有⼈在应⽤(应该db2stop force)db start (应该db2start)//connect to wjm_mis user wyn using wyn(重新连接后,表⽰在使⽤,不能备份)backup db wjm_cms to c:\9、在新的db2导⼊数据创建数据库: db2 create db 库名导⼊表结构操作:db2 -tvf ⽂件名.sql导⼊数据操作:db2move 新建库名 load我们⽤db2look命令得到数据库对象的DDL 脚本DB2的db2look命令诠释如下:db2look 版本 8.2db2look:⽣成 DDL 以便重新创建在数据库中定义的对象语法: db2look -d DBname [-e] [-u Creator] [-z Schema] [-t Tname1 Tname2...TnameN] [-tw Tname] [-h] [-o Fname] [-a][-m] [-c] [-r] [-l] [-x] [-xd] [-f] [-fd] [-td x] [-noview] [-i userID] [-w password][-v Vname1 Vname2 ... VnameN][-wrapper WrapperName] [-server ServerName] [-nofed]db2look -d DBname [-u Creator] [-s] [-g] [-a] [-t Tname1 Tname2...TnameN][-p] [-o Fname] [-i userID] [-w password]db2look [-h]-d: 数据库名称:这必须指定-e: 抽取复制数据库所需要的 DDL ⽂件此选项将⽣成包含 DDL 语句的脚本可以对另⼀个数据库运⾏此脚本以便重新创建数据库对象此选项可以和 -m 选项⼀起使⽤-u: 创建程序标识:若 -u 和 -a 都未指定,则将使⽤ $USER如果指定了 -a 选项,则将忽略 -u 选项-z: 模式名:如果同时指定了 -z 和 -a,则将忽略 -z联合部分的模式名被忽略-t: ⽣成指定表的统计信息可以指定的表的数⽬最多为 30-tw: 为名称与表名的模式条件(通配符)相匹配的表⽣成 DDL当指定了 -tw 选项时,-t 选项会被忽略-v: 只为视图⽣成 DDL,当指定了 -t 时将忽略此选项-h: 更详细的帮助消息-o: 将输出重定向到给定的⽂件名如果未指定 -o 选项,则输出将转到 stdout-a: 为所有创建程序⽣成统计信息如果指定了此选项,则将忽略 -u 选项-m: 在模拟⽅式下运⾏ db2look 实⽤程序此选项将⽣成包含 SQL UPDATE 语句的脚本这些 SQL UPDATE 语句捕获所有统计信息可以对另⼀个数据库运⾏此脚本以便复制初始的那⼀个当指定了 -m 选项时,将忽略 -p、-g 和 -s 选项-c: 不要⽣成模拟的 COMMIT 语句除⾮指定了 -m 或 -e,否则将忽略此选项将不⽣成 CONNECT 和 CONNECT RESET 语句省略了 COMMIT。

sql导出表结构语句

sql导出表结构语句

sql导出表结构语句SQL(Structured Query Language)是一种用于管理关系数据库系统的标准编程语言。

在数据库管理中,导出表结构语句是一项常见的任务。

这种语句用于将数据库中的表结构导出为一个可执行的SQL脚本,方便在其他环境中重新创建该表结构。

下面将介绍如何编写SQL导出表结构语句。

首先,为了导出表结构,我们需要确定要导出的表名。

假设我们要导出的表名为“customers”。

一、导出表结构的语句格式如下:```SHOW CREATE TABLE table_name;```其中,table_name 是要导出的表名。

二、针对我们的示例表“customers”,导出表结构的语句如下:```SHOW CREATE TABLE customers;```执行这个语句后,系统将返回一个结果集,其中包含了创建表的SQL语句。

三、导出表结构的结果示例:```CREATE TABLE `customers` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(100) NOT NULL,`email` varchar(100) NOT NULL,`phone` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;```以上是导出表结构语句的示例结果。

这个语句包含了表名、列名、列的数据类型、列的约束等信息,以及表的存储引擎和字符集等其他选项。

需要注意的是,不同的数据库系统可能有不同的语法和特性。

上述示例适用于MySQL数据库。

如果你使用的是其他数据库系统(如Oracle、SQL Server等),可能需要使用不同的语法。

在MySQL中,可以将上述导出的结果复制到一个新的SQL文件中,并保存为“table_structure.sql”(或其他合适的文件名)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

--获取表结构创建脚本Alter Proc sp_SYS_CreateTableSQL_Struct(@TableName sysname)ASSET NOCOUNT ONDECLARE @ObjectID intDECLARE @TableScript Table(Iden Int IDENTITY(1, 1) ,ScriptLine nvarchar(4000)) SET @ObjectID = object_id(@TableName)IF @ObjectID IS NULL OR OBJECTPROPERTY(@ObjectID, 'IsTable') = 0BEGINRAISERROR('指定的对象不是表对象', 16, 1)RETURNEND--获取表的创建脚本--插入表头INSERT INTO @TableScript(ScriptLine)SELECT 'Create Table ' + USER_NAME(OBJECTPROPERTY(@ObjectID, 'OwnerId')) + '.'+ object_name(@ObjectID) + '('--插入字段INSERT INTO @TableScript(ScriptLine)SELECT ' ' + + ' ' + + '' +CASE WHEN c.Object_id IS NOT NULL THEN ' Identity(' +CONVERT(nvarchar, c.seed_value) + ', ' + CONVERT(nvarchar, c.increment_value) + ')'ELSE '' END +CASE WHEN b.xusertype IN (167, 175, 231, 239) THEN '(' + CONVERT(nvarchar, a.prec) + ')'WHEN b.xusertype in (106, 108) THEN '(' + CONVERT(nvarchar, a.xprec) + ', ' + CONVERT(nvarchar, a.xscale) + ')'ELSE '' END +CASE a.isnullable WHEN 1 THEN '' ELSE ' Not' END + ' Null' +CASE WHEN IS NOT NULL THEN ' Default' + d.Definition ELSE'' END +','FROM sys.syscolumns aLEFT JOIN sys.systypes b ON a.xusertype = b.xusertypeLEFT JOIN sys.identity_columns c ON c.Object_id = a.ID AND c.Column_ID = a.ColIDLEFT JOIN sys.default_constraints d ON d.Parent_Object_ID = a.ID ANDd.Parent_column_ID = a.ColIDWHERE a.[ID] = @ObjectIDORDER BY a.ColOrder--插入主键和索引DECLARE @IndexID int, @IndexScript nvarchar(4000)DECLARE IndexCursor CURSOR FORSELECT b.object_id, ' Constraint ' + + N' ' +CASE a.Type WHEN 'PK' THEN 'Primary Key ' WHEN 'UQ' THEN 'UNIQUE ' END + CASE b.Type WHEN 1 THEN 'CLUSTERED' WHEN 2 THEN 'NONCLUSTERED ' END + '(' FROM sys.key_constraints aLEFT JOIN sys.indexes b ON b.Object_ID = a.Parent_Object_ID AND b.index_id= a.unique_index_idWHERE a.Parent_Object_ID = @ObjectIDOPEN IndexCursorFETCH NEXT FROM IndexCursor INTO @IndexID, @IndexScriptWHILE @@FETCH_STATUS = 0BEGINSELECT @IndexScript = @IndexScript + INDEX_COL(object_name(OBJECT_ID), 2,1) + ', 'FROM sys.index_columnsWHERE Object_ID = @IndexID --AND Index_ID = 2SET @IndexScript = LEFT(@IndexScript, LEN(@IndexScript) - 1) + '),'INSERT INTO @TableScript(ScriptLine) VALUES(@IndexScript)FETCH NEXT FROM IndexCursor INTO @IndexID, @IndexScriptENDCLOSE IndexCursorDEALLOCATE IndexCursor--除去最后一个,号UPDATE @TableScriptSET ScriptLine = LEFT(ScriptLine, LEN(ScriptLine) - 1)WHERE Iden = (SELECT MAX(Iden) FROM @TableScript)INSERT INTO @TableScript(ScriptLine) VALUES(')')INSERT INTO @TableScript(ScriptLine) VALUES('GO')INSERT INTO @TableScript(ScriptLine) VALUES('')--获取表备注(表字段说明/表说明)/*DECLARE @PropScript nvarchar(4000)INSERT INTO @TableScript(ScriptLine)SELECT N'EXEC sys.sp_addextendedproperty @name = N''' + + N''', @value= N''' + CONVERT(nvarchar, a.Value)+ N''', @level0type = N''SCHEMA'', @level0name = N''' +USER_NAME(OBJECTPROPERTY(a.major_Id, N'OwnerId'))+ N''', @level1type = N''TABLE'', @level1name = N''' + + N'''' FROM sys.extended_properties aLEFT JOIN sys.objects b ON b.[Object_ID] = a.major_IdWHERE a.major_Id = @ObjectIDAND Minor_ID = 0INSERT INTO @TableScript(ScriptLine) VALUES('GO')DECLARE PropCursor CURSOR FORSELECT N'EXEC sys.sp_addextendedproperty @name = N''' + + N''', @value= N''' + CONVERT(nvarchar, a.Value)+ N''', @level0type = N''SCHEMA'', @level0name = N''' +USER_NAME(OBJECTPROPERTY(a.major_Id, N'OwnerId'))+ N''', @level1type = N''TABLE'', @level1name = N''' + + N''''+ N', @level2type = N''COLUMN'', @level2name = N''' + c.[Name] + N'''' FROM sys.extended_properties aLEFT JOIN sys.objects b ON b.[Object_ID] = a.major_IdLEFT JOIN sys.syscolumns c ON c.[ID] = a.major_Id AND c.ColID = a.Minor_ID WHERE a.major_Id = @ObjectID AND Minor_ID <> 0OPEN PropCursorFETCH NEXT FROM PropCursor INTO @PropScriptWHILE @@FETCH_STATUS = 0BEGININSERT INTO @TableScript(ScriptLine) VALUES(@PropScript)INSERT INTO @TableScript(ScriptLine) VALUES(N'GO')FETCH NEXT FROM PropCursor INTO @PropScriptENDCLOSE PropCursorDEALLOCATE PropCursorINSERT INTO @TableScript(ScriptLine) VALUES('')*/--获取表外键DECLARE @ConstID int, @i tinyint, @keyCnt tinyint, @TempletSQL nvarchar(400),@SQLScript nvarchar(500),@FColName sysname, @RColName sysname,@ForeignLine nvarchar(4000), @ReferencesLine nvarchar(4000),@ReferencesAction nvarchar(4000)DECLARE @ConstIDTable table(ConstID int)SELECT @FColName = '', @RColName = '',@TempletSQL = N'SELECT @eFColName = ''['' + col_name(FkeyID, Fkey%d) +'']'', @eRColName = ''['' '+ N' + col_name(RkeyID, Rkey%d) + '']'' FROM sys.sysreferences WHERE ConstID = @ConstID 'INSERT INTO @ConstIDTableSELECT ConstID FROM sys.sysreferences WHERE FKeyID = @ObjectID OR RKeyID =@ObjectID ORDER BY FKeyIDWHILE EXISTS(SELECT * FROM @ConstIDTable)BEGINSELECT TOP 1 @ConstID = ConstID FROM @ConstIDTableDELETE FROM @ConstIDTable WHERE ConstID = @ConstIDINSERT INTO @TableScriptSELECT N'--ALTER TABLE [dbo].[' + object_name(FKeyID) + '] WITH CHECK'FROM sys.sysreferencesWHERE ConstID = @ConstIDINSERT INTO @TableScript(ScriptLine) VALUES('--ADD' + CHAR(13) + CHAR(10))SELECT @ForeignLine = N'--Constraint ' + object_name(ConstID) + ' ForeignKey(',@ReferencesLine = N'REFERENCES [dbo].[' + object_name(RKeyID) + '] (',@ReferencesAction = CASE b.Delete_Referential_Action WHEN 0 THEN N''WHEN 1 THEN N'ON DELETE Cascade'WHEN 2 THEN N'ON DELETE SET NULL'WHEN 3 THEN N'ON DELETE SET DEFAULT'END + ' ' +CASE b.Delete_Referential_Action WHEN 0 THEN N''WHEN 1 THEN N'ON UPDATE Cascade'WHEN 2 THEN N'ON UPDATE SET NULL'WHEN 3 THEN N'ON UPDATE SET DEFAULT'END,@keyCnt = KeyCntFROM sys.sysreferences aLEFT JOIN sys.foreign_keys b ON a.ConstID = b.Object_IDWHERE a.ConstID = @ConstID--取字段SET @i = 1WHILE @i <= @keyCntBEGINSET @SQLScript = REPLACE(@TempletSQL, '%d', CONVERT(nvarchar, @i))EXEC sp_executesql @stmt = @SQLScript, @params = N'@eFColName sysname output, @eRColName sysname output, @ConstID int',@eFColName = @FColName output, @eRColName =@RColName output, @ConstID = @ConstIDprint @SQLScriptSET @ForeignLine = @ForeignLine + CASE WHEN @i > 1 THEN ', ' ELSE '' END + @FColNameSET @ReferencesLine = @ReferencesLine + CASE WHEN @i > 1 THEN ', ' ELSE '' END + @RColNameSET @i = @i + 1ENDINSERT INTO @TableScript(ScriptLine) VALUES(@ForeignLine + N') ' +@ReferencesLine + N')')IF @ReferencesAction <> ''INSERT INTO @TableScript(ScriptLine) VALUES(@ReferencesAction)INSERT INTO @TableScript(ScriptLine) VALUES(N'GO')END--返回表的创建脚本SELECT ScriptLine FROM @TableScriptSET NOCOUNT OFF。

相关文档
最新文档