如何在 SQL Server 2008 中创建具有新名称的重复表

Posted

技术标签:

【中文标题】如何在 SQL Server 2008 中创建具有新名称的重复表【英文标题】:How to create duplicate table with new name in SQL Server 2008 【发布时间】:2010-07-13 21:44:09 【问题描述】:

如何在 SQL Server 2008 中创建一个重复的表,其中仅包含用新名称重复的结构?

我有一个包含 45 个字段的表,所以我想创建具有相同结构但新名称的新表。

【问题讨论】:

【参考方案1】:

在 SQL Management Studio 中右键单击表。

选择脚本...创建到...新查询窗口。

这将生成一个脚本以在新的查询窗口中重新创建表。

将脚本中的表名更改为您希望为新表命名的任何名称。

执行脚本。

【讨论】:

只是更改名称不起作用,看起来我们得到了主键约束的异常。 "数据库中已经有一个名为 .. 的约束"【参考方案2】:
SELECT * 
INTO target
FROM  source
WHERE 1 = 2

【讨论】:

这只会捕获一些结构。相同的列名、数据类型和可为空的设置。但其他一切都将被抛在后面。我脑海中留下的东西将包括 PK、UK、FK 和检查约束、身份属性和计算列。这取决于 OP 想要多少结构,这是否能满足 OP 的需求。 为什么是1=2?这不会总是假的吗? @AdilMalik 该问题要求仅复制表结构。所以 1=2 会阻止任何数据被复制。【参考方案3】:

在这里,我将向您展示两种不同的实现方式:

第一:

如果您只需要创建一个重复的表,那么只需运行命令:

SELECT top 0 * INTO [dbo].[DuplicateTable]
FROM [dbo].[MainTable]

当然,它并不完全有效。约束不会被复制,主键或默认值也不会被复制。该命令只创建一个具有相同列结构的新表,并且如果您想将数据插入到新表中。

第二(推荐):

但是,如果您想复制带有所有约束和键的表,请按照以下步骤操作:

    在 SQL Management Studio 中打开数据库。 右键单击要复制的表。 选择脚本表为 -> 创建到 -> 新查询编辑器窗口。这将生成一个脚本以在新的查询窗口中重新创建表。 在脚本中更改表名和相关键和约束。 执行脚本。

【讨论】:

【参考方案4】:
  SELECT * INTO newtable FROM oldtable where 1=2

Where 1=2 用于需要复制一个完整的结构 表而不复制数据。

 SELECT * INTO newtable FROM oldtable 

要创建包含数据的表,您可以使用此语句。

【讨论】:

【参考方案5】:

从现有表创建新表:(将 Old_Table 中的所有行复制到 de New_Table 中):

SELECT * INTO New_table FROM  Old_Table

将数据从一个表复制到另一个表(当您已经创建它们时):

Insert into Table_Name2 select top 1 * from Table_Name1

记得删除 top 1 参数并在需要时在 Select 上应用相关的 where 子句

【讨论】:

欢迎来到 *** 并感谢您提供帮助。请解释您的答案的要点,仅代码没有太大帮助。特别是,有一个与您的答案几乎相同的不同答案。它只是避免复制内容。不复制值似乎是 OP 所需行为的一部分。你能解释一下你的理由吗?【参考方案6】:
SELECT * INTO table2 FROM table1;

【讨论】:

【参考方案7】:

我已经使用了这个查询,它使用现有数据创建了新表。

查询:select * into [newtablename] from [existingtable]

这里是微软说明的链接。 https://docs.microsoft.com/en-us/sql/relational-databases/tables/duplicate-tables?view=sql-server-2017

【讨论】:

【参考方案8】:

在 SSMS 中右键单击所需的表 > 脚本为 > 创建到 > 新查询 -更改表的名称(例如table2) -更改表的 PK 键(例如 PK_table2)

USE [NAMEDB]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[table_2](
[id] [int] NOT NULL,
[name] [varchar](50) NULL,
CONSTRAINT [PK_table_2] PRIMARY KEY CLUSTERED 
(
[reference] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = 
OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON, 
OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

【讨论】:

【参考方案9】:

SQL中的重复表是指从现有的重复表中创建具有相同列名的新表。让我们假设该表包含 50 多个字段,并且您想创建一个具有完全相同列但在另一个新表中的表。如果我们从头开始创建表,这将花费更多时间,并且可以避免这种表重复,这会创建一个具有相同字段的新表。例如,让我们表这个示例表 Tbldepartment 包含以下字段,

如果我们想复制表格,

SELECT *  
INTO [NewTbl_Apartments]  
FROM [Tbl_Apartments]  
WHERE 1 = 2  

这里所说的1=2,这样可以防止数据从现有表复制到新创建的重复表中。

【讨论】:

【参考方案10】:

我的 SQL Server Management Studio 一直在问我如何才能让它变得更好,我有个主意!能够突出显示一个表格,然后按 ctrl C,按 ctrl V!会很好,同时回答这个问题!

【讨论】:

您是否通过发明一项新功能并说它可以解决问题来回答?

以上是关于如何在 SQL Server 2008 中创建具有新名称的重复表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 2008 表中创建计算列

怎么在 sql server 2008中创建登录名

在 C# 中创建(按需)SQL Server 2008 Express 数据库的最佳实践?

如何在 SQL Server 中创建具有数十年的日期维度?

如何使用 C# 在 SQL Server 数据库中创建视图?

VB.NET 不在 sql server 2008 express 中创建数据库