这与我想做的事情一致:
UPDATE [table1]
SET FirstName IN (SELECT [FirstName] FROM [table2])
我需要在 [table1] 上更新 300 个名称,这些名称位于 [table2] 中。名称为 NULL。它们必须是 [table2] 中的名称。
记录集可以是随机的。所以表之间不需要关系。
我该怎么做呢?
忽略缺少的关系、排序问题或任何可能导致数据不准确的事情,你可以试试这个,它会为两个表中的每条记录任意分配一个行号,并将两个表与该数字匹配,然后根据该匹配更新名称字段:
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()))
你会真正得到一些随机数据。
我需要用 300 个名称填充 [table1],这些名称位于 [table2] 中。
填充意味着插入,然后这个工作:
INSERT INTO table1
SELECT FirstName FROM table2;
如果您只是尝试在表一中创建新记录,请执行以下操作:
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)