如何将数据从父级的一列移动到新的子表中?

时间:2016-04-23 11:45:25

标签: sql-server sql-server-2014

我有两个表: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做的事情,还是我需要使用游标?任何有关如何做到这一点的帮助和建议将非常感激。

1 个答案:

答案 0 :(得分:1)

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

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

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