mssql 返回表的创建语句
if OBJECT_ID('sp_create_table_sql','P') is not null
drop proc sp_create_table_sql
go
create proc sp_create_table_sql ( @tablename varchar(255) )
as
begin
-- exec sp_create_table_sql 'Ad_AdGroup'
-- 0. 弘恩
-- 1. 不支持非主键类的索引
-- 2. 不支持主分键的非默认排序
-- 3. 不支持DEFAULT
-- 4. 不支持计算列
-- 5. 待完整
declare @sql_create varchar(max) = '';
declare @sql_column varchar(max);
declare @sql_primary varchar(max);
with cte as
(
select QUOTENAME( c.name )+' '+
TYPE_NAME(c.system_type_id)+' '+
case when TYPE_NAME( c.system_type_id) in ('char','varchar','decimal') then ' ( ' else '' end +
case when TYPE_NAME( c.system_type_id) in ('char','varchar','nvarchar' ) then cast(max_length as varchar) else '' end+
case when TYPE_NAME( c.system_type_id) in ('decimal' ) then cast(c.precision as varchar)+','+cast(c.scale AS varchar) else '' end+
case when TYPE_NAME( c.system_type_id) in ('char','varchar','decimal') then ' ) ' else '' end +
case when c.is_nullable = 1 then ' null ' else ' not null ' end +
case when c.is_identity = 0 then ' ' else ' identity ' end sqlstr ,
column_id
from sys.objects as o
join sys.columns as c on o.object_id = c.object_id
where o.name = @tablename and o.type = 'U'
)
select @sql_column = stuff(
(select ',' + sqlstr + CHAR(10)
from cte
order by column_id asc
for xml path('') ),1,1,'')
;
select @sql_primary = stuff((
select ',' + c.name
from sys.index_columns as i
join sys.indexes as ix on i.object_id = ix.object_id and i.index_id = ix.index_id
join sys.columns as c on i.object_id = c.object_id and i.column_id = c.column_id
where OBJECT_NAME(i.object_id) = @tablename
and ix.is_primary_key = 1
order by i.key_ordinal
for xml path('')
),1,1,'')
set @sql_create = ' create table ' + @tablename + '( '
+ @sql_column
+ case when len(@sql_primary) >= 1 then (', primary key ( ' + @sql_primary + ')') else '' end
+ ' ) '
print ' -- @sql_create -- '
print @sql_create
end
mssql 返回表的创建语句的更多相关文章
- 通过Oracle DUMP 文件获取表的创建语句
1. 有了dump文件之后 想获取表的创建语句. 之前一直不知道 dump文件能够直接解析文件. 今天学习了下 需要的材料. dump文件, dump文件对应的schema和用户. 以及一个版本合适的 ...
- 通过phoenix创建hbase表失败,创建语句卡住,hbase-hmaster报错:exception=org.apache.hadoop.hbase.TableExistsException: SYNC_BUSINESS_INFO_BYDAY_EFFECT
问题描述: 前几天一个同事来说,通过phoenix创建表失败了,一直报表存在的错误,删除也报错,然后就针对这个问题找下解决方案. 问题分析: 1.通过phoenix创建表,一直卡住不动了.创建语句如下 ...
- oracle中查询用户表/索引/视图创建语句
不多说,直接上干货 1.查询当前用户下表的创建语句 select dbms_metadata.get_ddl('TABLE','ux_future') from dual; 2.查询其他用户下表的创建 ...
- (转载)根据数据字典表定义的表结构,生成创建表的SQL语句
<来源网址:http://www.delphifans.com/infoview/Article_221.html>根据数据字典表定义的表结构,生成创建表的SQL语句 //1. 类名:T ...
- 第16课-数据库开发及ado.net-数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍
第16课-数据库开发及ado.net 数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍 SQL语句入门(脚本.命令) SQL全名是结构化查询语言(Structur ...
- Mysql的基础使用之SQL原生语句的使用:表的 创建 删除 修改 (一)
上一篇主要讲的是关于Mysql的分支MariaDB在Linux下的安装 顺利安装完成的小伙伴,就可以接着来试试SQL的魅力了 红色为命令 蓝色为自定义名 查看数据库 MariaDB [(none)]& ...
- sqlserver查询所有表名、字段名、类型、长度和存储过程、视图的创建语句
-- 获得存储过程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.i ...
- phpmyadmin查看创建表的SQL语句
本人菜鸟 发现创建表的SQL语句还不会 直接phpmyadmin解决的 查看见表的语句除了直接到处SQL格式文件 打开查看外 就是执行语句查询 语句:show create table 表名 貌似大 ...
- (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
(喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句 在我们RDIFramework.NET代码生成器中,有这样一个应用,就是通过数据库表自动生成表的CREA ...
随机推荐
- 【Web】java date 到 Oracle date 精确到时分秒
有两种方法: java.util.Date startTime=new Date("2014/01/01 23:00:00"); 1.new Timestamp(startTime ...
- c++,派生类对象可以对基类赋值,基类对派生类不可以赋值
派生类对象可以对基类对象赋值,赋值时属于派生类独有的部分就舍弃不用. #include <iostream> using namespace std; class DemoA { publ ...
- 关于C++ 的eof
#include<iostream> #include<fstream> #define MAXSIZE 1000 using namespace std; int main( ...
- Chapter 4.开放-封闭原则
开放-封闭原则:是说软件实体应该可以扩展,但不可修改. 设计人员必须对于他设计的模块应该对哪种变化封闭做出选择,先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化. 面对需求,对程序的改动是通 ...
- DE1-SOC的sof文件无法下载解决办法
按照前面友晶科技的文档介绍一步步的做,后面发现根本无法下载sof文件. 通常思维: 一,器件选错了.器件选择错误会导致sof文件无法下载,至于这个ID具体怎么识别我没有追究.如果是这种错误Quartu ...
- php language construct 语言构造器
isset和empty看起来像是函数,我们也经常把它当作函数一样使用,但是实际上,它们是语言构造器. php中的语言构造器就相当于C中的预定义宏的意思,它属于php语言内部定义的关键词,不可以被修改, ...
- Linux高性能server编程——高级I/O函数
高级I/O函数 pipe函数 pipe函数用于创建一个管道,实现进程间的通信. #include <unistd.h> int pipe(int pipefd[2]); 通过pipe ...
- WIZnet推出串口转以太网模块WIZ550S2E
WIZ550S2E 是一个网关模块,提供RS-232转TCP/IP协议功能.并可基于TCP/IP及以太网实现网络设备管理.远程測量,仅仅需用RS-232串口连接当前设备.换句话说,WIZ550S2E是 ...
- parquet 合并元数据
合并元数据:两个数据集,有着一部分相同的列,将他们合并成一个数据集时merge的过程. 合并的规则:相同的列,在新的数据集中,是通用的列, 各自不同的列,也作为新的数据集的列. Spark将数据写入到 ...
- BZOJ 3505: [Cqoi2014]数三角形( 组合数 )
先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不 ...