如何将数据添加到单个列中

时间:2019-01-16 13:47:24

标签: sql-server sql-server-2008

关于向表的特定列添加数据,我有一个疑问,我对自己需要的内容有一个post yesterday where a user guided me(感谢),并说更新是我所需要的方式,但我仍然无法实现自己的目标。

我有两个表,分别是要添加信息的表和要添加信息的表,这是一个示例:

source_table  (has only a column called "name_expedient_reviser" that is nvarchar(50))
name_expedient_reviser
kim
randy
phil
cathy
josh
etc.

另一方面,我有目标表,此表有两列,一列具有ID,另一列将插入名称,此列值为null,有些ID将用于这个。

这是另一张桌子的样子

dbo_expedient_reviser(具有2列,unique_reviser_code数字PK NOT AI和name_expedient_reviser是检查权宜之计的用户,该值设置为nvarchar(50)),这也是此表现在的方式:

dbo_expedient_reviser
unique_reviser_code | name_expedient_reviser 
1                   | NULL
2                   | NULL
3                   | NULL
4                   | NULL
5                   | NULL
6                   | NULL

我需要的是要插入到name_expedient_reviser行中的source_table的信息,因此结果应如下所示

dbo_expedient_reviser
unique_reviser_code | name_expedient_reviser 
1                   | kim
2                   | randy
3                   | phil
4                   | cathy
5                   | josh
6                   | etc.

如何将信息传递到此表中?我该怎么办?。

编辑

我看到应该有效的查询不会更新,这是一个

UPDATE dbo_expedient_reviser
SET dbo_expedient_reviser.name_expedient_reviser = source_table.name_expedient_reviser
FROM source_table
JOIN dbo_expedient_reviser ON source_table.name_expedient_reviser = dbo_expedient_reviser.name_expedient_reviser
WHERE dbo_expedient_reviser.name_expedient_reviser IS NULL 

该查询应该将信息更新到表中,只要行name_expedient_reviser为null(正确但行不通),便从source_table中提取信息。

2 个答案:

答案 0 :(得分:1)

由于名称没有与之关联的ID,因此我仅使用ROW_NUMBER并加入ROW_NUMBER = unique_reviser_code。唯一的问题是,知道哪些行为空。从我看来,它们都显示为空。在您的数据中,是这种情况还是在表中偶尔出现诸如5,17,29 ...等的名称?如果dbo_expedient_reviser中的name_expedient_reviser为空,则也可以截断表并直接插入值。希望unique_reviser_code尚未链接到其他东西。

WITH CTE (name_expedient_reviser, unique_reviser_code)
AS
    (
    SELECT   name_expedient_reviser
            ,ROW_NUMBER() OVER (ORDER BY name_expedient_reviser)
    FROM source_table
    )
UPDATE er
SET er.name_expedient_reviser = cte.name_expedient_reviser      
FROM dbo_expedient_reviser er
JOIN CTE on cte.unique_reviser_code = er.unique_reviser_code

或截断:

Truncate Table dbo_expedient_reviser

INSERT INTO dbo_expedient_reviser (name_expedient_reviser, unique_reviser_code)
SELECT DISTINCT
    unique_reviser_code = ROW_NUMBER() OVER (ORDER BY name_expedient_reviser)
   ,name_expedient_reviser
FROM source_table

答案 1 :(得分:1)

在这种情况下将数据插入到单个列中是不可能的,但是更新和移动所需的数据是唯一的方法