加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 复制表的完整结构

发布时间:2021-05-26 18:09:34 所属栏目:MsSql教程 来源:网络整理
导读:使用某些方法,当您创建表的副本时,您将丢失索引,PK,FK等.例如,在SQL Server中,我可以说: select * into dbo.table2 from dbo.table1; 这只是表格的简单副本;缺少所有索引/约束.如何复制表结构(不使用备份)? 我主要是想手动执行此操作,但如果不可能,我会

使用某些方法,当您创建表的副本时,您将丢失索引,PK,FK等.例如,在SQL Server中,我可以说:

select * into dbo.table2 from dbo.table1;

这只是表格的简单副本;缺少所有索引/约束.如何复制表结构(不使用备份)?

我主要是想手动执行此操作,但如果不可能,我会接受任何解决方案.

解决方法

您当然可以使用UI相对简单地编写表格脚本:

这将输出CREATE TABLE脚本,您只需要使用新名称搜索并替换旧名称(并验证具有新名称的对象尚不存在).

但是,如果您尝试自动执行此操作(例如,在代码中生成创建表脚本),则会更加麻烦.上面的脚本选项不只是从元数据中的单个位置拉出整个CREATE TABLE DDL;它在代码中完成了一大堆魔术,以生成最终的CREATE TABLE脚本(您可以使用Profiler查看它获取数据的位置,但是您无法看到它如何组装它).我为此建议了一个选项:

http://connect.microsoft.com/SQLServer/feedback/details/273934

然而,这得到了很少的投票,很快被微软击落.您可能会发现使用第三方工具生成模式更值得(I’ve blogged about this).

在SQL Server 2012中,有一些新的元数据函数可以让您比2005,2008和2008 R2中的工作更加接近,将元数据中的列信息拼凑在一起(这有很多警告,例如,如果它是十进制你必须添加精度/比例,如果[n [var [char]]你必须添加长度规格,如果n [var] char你必须将max_length减半,如果它是MAX你必须将-1更改为MAX等等).在SQL Server 2012中,这部分更容易一些:

SELECT name,system_type_name,is_nullable FROM
  sys.dm_exec_describe_first_result_set('select * from sys.objects',NULL,0)

结果:

name                   system_type_name  is_nullable
--------------------   ----------------  -----------
name                   nvarchar(128)     0
object_id              int               0
principal_id           int               1
schema_id              int               0
parent_object_id       int               0
type                   char(2)           0
type_desc              nvarchar(60)      1
create_date            datetime          0
modify_date            datetime          0
is_ms_shipped          bit               0
is_published           bit               0
is_schema_published    bit               0

I’ve blogged about this,too.

可以说,与使用sys.columns的复杂方法相比,这更接近您的目标CREATE TABLE语句,但仍有许多工作要做.密钥,约束,行选项中的文本,文件组信息,压缩设置,索引等.这是一个非常长的列表,我将再次建议您查看第三方工具而不是,可能会重复过来 – 使用类比,重新发明轮子.

总而言之,如果您需要通过代码执行此操作,但您可以在SQL Server之外执行此操作,则可以考虑使用SMO / PowerShell.见this tip和Scripter.Script() method.

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读