SQL Server 使用SQL获取建表语句
SQL Server 没有提供函数或存储过程直接查看建表语句,当然它的DBMS客户端提供了这个功能 但是太麻烦 ,下面介绍3种方式获取 建表语句。
举例表SYS_USER
1. 数据库→任务→生成脚本→选择特定表(存储过程也可)→设置高级设置中类型→保存到新建查询窗口 即可。
2. 找到目标表右键→编写表脚本→create到新查询编辑窗口 即可
3.自建 存储过程 帮助生成建表语句 后调用
(此部分参考 https://www.lefer.cn/posts/25533/ )
i) Create Proceduce
CREATE PROCEDURE sp_helptable ( @table VARCHAR(100) )
-- exec sp_helptable tablename
-- SQL Server 没有提供函数或存储过程直接查看建表语句(),此存储过程可实现
ASBEGINDECLARE @sql TABLE(s VARCHAR(1000) ,id INT IDENTITY);
-- 创建语句INSERT INTO @sql ( s ) VALUES ( 'create table [' + @table + '] (' );--获取注释SELECT A.name AS table_name ,B.name AS column_name ,C.value AS column_descriptionINTO #columnspropertiesFROM sys.tables AINNER JOIN sys.columns B ON B.object_id = A.object_idLEFT JOIN sys.extended_properties C ON C.major_id = B.object_idAND C.minor_id = B.column_idWHERE A.name = @table;-- 获取列的列表,拼接语句INSERT INTO @sql ( s )SELECT ' [' + a.COLUMN_NAME + '] ' + DATA_TYPE+ COALESCE('('+ CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR)+ ')', '') + ' '+ CASE WHEN EXISTS ( SELECT idFROM syscolumnsWHERE OBJECT_NAME(id) = @tableAND name = a.COLUMN_NAMEAND COLUMNPROPERTY(id,name,'IsIdentity') = 1 )THEN 'IDENTITY('+ CAST(IDENT_SEED(@table) AS VARCHAR)+ ','+ CAST(IDENT_INCR(@table) AS VARCHAR)+ ')'ELSE ''END + ' '+ ( CASE WHEN IS_NULLABLE = 'NO' THEN 'NOT 'ELSE ''END ) + 'NULL ' + COALESCE('DEFAULT '+ COLUMN_DEFAULT, '')+ CASE WHEN ISNULL(CONVERT(VARCHAR, b.column_description),'') <> ''THEN '/**'+ ISNULL(CONVERT(VARCHAR, b.column_description),'') + '**/,'ELSE ','ENDFROM INFORMATION_SCHEMA.COLUMNS aLEFT JOIN #columnsproperties b ON CONVERT(VARCHAR, a.COLUMN_NAME) = CONVERT(VARCHAR, b.column_name)WHERE a.TABLE_NAME = @tableORDER BY ORDINAL_POSITION;
-- 主键DECLARE @pkname VARCHAR(100);SELECT @pkname = CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE TABLE_NAME = @tableAND CONSTRAINT_TYPE = 'PRIMARY KEY';IF ( @pkname IS NOT NULL )BEGININSERT INTO @sql ( s ) VALUES ( ' PRIMARY KEY (' );INSERT INTO @sql ( s )SELECT ' [' + COLUMN_NAME + '],'FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERE CONSTRAINT_NAME = @pknameORDER BY ORDINAL_POSITION;-- 去除尾部多余的字符UPDATE @sqlSET s = LEFT(s, LEN(s) - 1)WHERE id = @@identity;INSERT INTO @sql ( s ) VALUES ( ' )' );END;ELSEBEGIN-- 去除尾部多余的字符UPDATE @sqlSET s = LEFT(s, LEN(s) - 1)WHERE id = @@identity;END;
-- 继续拼接INSERT INTO @sql ( s ) VALUES ( ')' );-- 输出结果SELECT s AS CreateTableSQLFROM @sqlORDER BY id;END;
ii)调用
EXEC sp_helptable sys_user
iii)
最后 还有一种 SQL 直接建 表的 sql 如下
SELECT a.*,'' 其他新增列 into new_table from sys_user a WHERE 1=2
--要求 new_table不存在
SELECT a.*,'' 其他新增列 into new_table from sys_user a WHERE 1=2 之所以加条件 是因为 这里只需要表结构, 无需数据, 与SQL insert into new_table2 SELECT * from sys_user 的区别在于 后者 要求new_table2 存在
SQL Server 使用SQL获取建表语句相关推荐
- sql字段修改及查看建表语句
-- 修改字段长度 -- 举例:alter table user modify name varchar(300);alter table 表名 modify 字段名 目标字段;-- 修改字段名 -- ...
- greenplum获取建表语句_Greenplum数据库基本语句 - 树懒学堂
这一节提供了Greenplum数据库中有关操纵数据和并发访问的信息.这个主题包括下列小标题: 关于Greenplum数据库中的并发控制 插入行 更新现有行 删除行 使用事务 清理数据库 关于Green ...
- Shell脚本导出导入MySQL建表语句
Shell脚本导出导入MySQL建表语句 一.导出sql语句 1.需求: 2.shell脚本如下: 二.导入sql语句 1.需求 2.shell实现1 3.shell实现2 一.导出sql语句 1.需 ...
- SQL Server 怎样使用SQL输出建表语句
在一般的数据库系统中可使用 表名右键--[Script Table as]--[Create To]--XX 输出建表SQL语句,但在某些SQL Server系统中可能客户仅提供数据库查询权限,导致无 ...
- Oracle和sql server中复制表结构和表数据的sql语句
在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...
- Sql Server 优化 SQL 查询:如何写出高性能SQL语句
1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...
- SQL SERVER 的SQL语句优化方式小结
SQL SERVER 的SQL语句优化方式小结 详细出处参考:http://www.jb51.net/article/19547.htm 1.SQL SERVER 2005的性能工具中有SQL Ser ...
- oracle建表语句string,编程式Mybatis获取oracle表创建表语句
写在前面 Mybatis之前使用过一段时间,当然只是粗糙地使用,而且配合Spring有一部分Mybatis管理的内容都交给了Spring,加上一段时间没用到又开始忘了,刚好今天碰到一个要求,Oracl ...
- SQL Server中的内存优化表变量
This article will cover the usage details and performance advantages of the memory-optimized table v ...
- sql server 查看死锁,以及执行语句
sql server 查看死锁,以及执行语句 第二秒 select t1.resource_type [资源锁定类型], DB_NAME(resource_database_id) as 数据库名, ...
最新文章
- deepin系统引导_国产 Linux 发行版 深度操作系统 20 正式版发布
- qt dll 1% 不是有效的win32应用程序
- 一般向量空间的基变换_从希尔伯特空间的角度看线性变换的一般思想和问题
- 怎么搞技术呢?我觉得最简单的方法
- Anaconda中下载速度贼慢?
- Spring中AOP切面编程学习笔记
- kibana 查询_Exceptionless服务端+kibana部署实时日志纪要
- java 托盘开发_java托盘开发界面记录
- 【牛客练习赛58-C】矩阵消除游戏(dfs+状态标记)
- svn使用方法以及使用教程
- FinalData 数据恢复工具[绿色版]
- PCL计算点到直线距离
- “双非计算机专硕”考博历程分享
- android补间动画有哪几种,Android补间动画、属性动画 常用功能总结
- web前端面试题附答案035-关于number考点大全,走过路过不会错过
- SHA-256哈希函数实现
- ionic3生产打包javascript内存溢出的解决方法
- 【nginx】配置nginx.conf 配置多个代理
- 丘成桐中学生计算机科学竞赛,丘成桐计算机奖介绍,为什么要参加丘成桐奖?...
- 最严谨的计算机语言p,P=NP?这世界真有捷径?
热门文章
- exoplayer和mediaplayer的封装
- 别再白瞎去花钱购买高精度卫星地图,一文教你解决精度与下载问题
- 2022最新软考考试时间已公布
- 《Qt图形界面编程入门》实验
- 视频教程-新版全面系统完整的人工智能教程-机器学习
- ArchLinux安装笔记「双系统U盘安装」(2018-11-19)
- 学历真的重要吗?当然非常非常非常重要。
- SCT2450QSTE 国产车规AEC-Q100 3.8V-36V 5A 高效同步降压 DCDC 转换器 替代TSP54540
- ascii码01100001_【多选题】计算机中字符a的ASCII码值是(01100001)2,那么字符c的ASCII码值是( )。...
- 统一建模语言——UML