【问题标题】:How can I move data from one column of a parent into a new child table?如何将数据从父列的一列移动到新的子表中?
【发布时间】:2016-04-23 11:45:25
【问题描述】:

我有两个表格:WordForm 和 WordDefinition:

CREATE TABLE [dbo].[WordForm] (
    [WordFormId]    VARCHAR (20)  NOT NULL,
    [WordId]     VARCHAR (20)  NOT NULL,
    [Primary]    BIT           DEFAULT ((0)) NOT NULL,
    [PosId]      INT           NOT NULL,
    -- I want to move text data from this column into 
    -- the WordDefinition table column called Definition
    -- and then I will remove the column from here later.
    [Definition] VARCHAR (MAX) NULL, 
    [Sample]     VARCHAR (MAX) NULL,
    [Synonym]    VARCHAR (100) NULL,
    PRIMARY KEY CLUSTERED ([WordFormId] ASC),
    CONSTRAINT [FK_WordFormPos] FOREIGN KEY ([PosId]) REFERENCES [dbo].[Pos] ([PosId]),
    CONSTRAINT [FK_WordFormWord] FOREIGN KEY ([WordId]) REFERENCES [dbo].[Word] ([WordId])
);



CREATE TABLE [dbo].[WordDefinition]
(
    [WordDefinitionId] INT IDENTITY (1, 1) NOT NULL,
    [WordFormId]    VARCHAR (20)  NOT NULL,
    [Definition]  VARCHAR (MAX) NOT NULL
    CONSTRAINT [PK_WordDefinition] PRIMARY KEY CLUSTERED ([WordDefinitionId] ASC),
)

最初创建 WordForm 表是为了保存单个定义,但现在我意识到每个 WordForm 可以有更多定义。

为了实现这一点,我添加了 WordDefinition 表。一个 WordForm 行到多个 WordDefinition 行。

但是现在我需要做的是遍历 WordForm 表并添加一个带有原始定义(来自 WordForm)的条目,并将其复制到 WordForm 中每一行的 WordDefinition 表中。

这是我只能使用 SQL 才能做到的事情,还是需要使用游标。任何有关如何执行此操作的帮助和建议将不胜感激。

【问题讨论】:

    标签: sql-server sql-server-2014


    【解决方案1】:

    我认为您可以使用 1 个查询 INSERT INTO SELECT 来执行此操作,如下所示:

    INSERT INTO [dbo].[WordDefinition]
    SELECT [WordFormId], [Definition] 
    FROM [dbo].[WordForm]
    

    之后,您可以从WordForm 中删除旧列Definition

    【讨论】:

    • 谢谢。我会尝试这个并稍后更新问题。
    • @Alan 好的,谢谢,现在就试试吧,如果它有效,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多