-2

这与我想做的事情一致:

UPDATE [table1]
SET FirstName IN (SELECT [FirstName] FROM [table2]) 

我需要在 [table1] 上更新 300 个名称,这些名称位于 [table2] 中。名称为 NULL。它们必须是 [table2] 中的名称。

记录集可以是随机的。所以表之间不需要关系。

我该怎么做呢?

4

3 回答 3

3

忽略缺少的关系、排序问题或任何可能导致数据不准确的事情,你可以试试这个,它会为两个表中的每条记录任意分配一个行号,并将两个表与该数字匹配,然后根据该匹配更新名称字段:

WITH Source AS 
(
    SELECT 
        Name, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RowNum
    FROM 
        [Table2]
), 
Destination AS 
(
    SELECT 
        Name, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RowNum
    FROM 
        [Table1] 
)
UPDATE 
    d
SET 
    d.Name = s.Name
FROM 
    Source s
JOIN 
    Destination d 
    ON 
    s.RowNum = d.RowNum

但是:如果没有将一个表与另一个表相关联的具体内容,您最终可能会将源表中的 300 个名称复制到目标表中的 300 行的随机集合中。


编辑:根据您想要随机数据的评论,如果您将ROW_NUMBER()列更改为:

ROW_NUMBER() OVER (ORDER BY (SELECT NEWID()))

你会真正得到一些随机数据。

于 2012-09-11T20:25:46.553 回答
2

我需要用 300 个名称填充 [table1],这些名称位于 [table2] 中。

填充意味着插入,然后这个工作:

INSERT INTO table1
    SELECT FirstName FROM table2;

这是一个例子:http ://sqlfiddle.com/#!3/0d2f4/1/0

于 2012-09-11T20:18:50.833 回答
1

如果您只是尝试在表一中创建新记录,请执行以下操作:

insert into Table1 (FirstName)
select FirstName from Table2

如果您需要更新记录,请执行以下操作:

update t1
   set FirstName = t2.FirstName,
       LastName  = t2.LastName
  from Table1 t1
  join Table2 t2 on t1.ID = t2.ID   -- (or whatever key you are using to join the two tables)
于 2012-09-11T20:17:57.370 回答