如何在 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 中创建具有新名称的重复表的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中创建(按需)SQL Server 2008 Express 数据库的最佳实践?