纵里寻她千百度,sql sever结构存储在此处
小陈在一个应用里面通过脚本的方式把表中部分数据和完整的表结构复制出来,如何实现他却头痛了....
sql 没有像oracle那么方便的语句,可以直接查询表的定义:
--oracle
SELECT DBMS_METADATA.GET_DDL('TABLE','TABLE_NAME') FROM DUAL;
除了通过SSMS前端生成或者导出表定义,如何通过脚本的方式快速复制表或者表的所有相关对象(索引、约束...)定义语句呢?
sp_help可以看到表的结构,当时不能拿到表的定义语句。
来来来,您可以这样子去把表的完整定义捞出来
首先,select * into 新表名 from 旧表名
这里我们会发现数据是很快进去了,但是新表的结构只有列的定义,其他都没有:
(1)、没有索引
(2)、没有主键约束、缺省值约束、check约束、外键约束
(3)、计算列变成普通列
那么接下来应该怎么处理呢?
第二步,需要把主键约束和索引的定义拼出来,内容在这里找:
indexes、index_columns
select c.name table_name,a.name index_name,(CASE i.is_unique when 1 then 'UNIQUE' else 'NONUNIQUE' end)
AS uniqueness,d.name column_name,null expression from sysindexes a join sysindexkeys b on a.id=b.id and a.indid=b.indid
join sys.indexes i
on i.name=a.name join sysobjects c on b.id=c.id join syscolumns d on b.id=d.id and b.colid=d.colid where a.indid not in(0,255) and
i.is_primary_key<>1 and c.name='T_GL_VOUCHER' order by c.name,a.name,b.keyno,d.name
第三步,需要把外键约束的定义拼出来,内容在这里找
foreign_keys、foreign_key_columns
第四步、需要把check约束拼出来,内容在这里找
check_constraints
第五步、需要把缺省值约束拼出来,内容在这里找
default_constraints
第六步、需要把新表中假的计算列删除,在这里找计算列定义:
computed_columns
好了,这下可以踏实做复制了吧
0.0
你可以使用datagrip,打开空白的查询窗口,然后输入select * from 表名, 在表名位置按住ctrl+鼠标左键后就打开了表定义的窗口。剩下的就是你们自己的copy
纵里寻她千百度,sql sever结构存储在此处
本文2024-09-16 18:20:29发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-21505.html