【发布时间】:2011-11-17 10:46:47
【问题描述】:
这是一个烦人的问题,我不知道如何解决它。我正在使用 Microsoft SQL Server 2008。
所以我有两个表,我需要更新它们。它们共享一个公共密钥,比如 id。我想用一些东西更新Table1,然后更新Table2分别在Table1中修改的行。
问题是我不太清楚哪些行被修改了,因为我用ORDER BY NEWID() 随机选择它们,所以我可能无法以任何方式在Table2 上使用JOIN。我正在尝试保存在Table1 的查询中修改的必要详细信息并将它们传递给 Table2
这就是我想要做的事情
CREATE TABLE IDS (id int not null, secondid int)
SELECT [Table1].[id], [Table1].[secondid]
INTO IDS
FROM
(
UPDATE [Table1]
SET [secondid]=100
FROM [Table1] t
WHERE t.[id] IN
(SELECT TOP 100 PERCENT t.[id] FROM [Table1]
WHERE (SOME_CONDITION)
ORDER BY NEWID()
)
)
UPDATE [Table2]
SET some_column=i.secondid
FROM [Table2] JOIN IDS i ON i.id = [Table2].[id]
但我明白了
关键字“UPDATE”附近的语法不正确。
所以问题是:我怎样才能解决语法错误或者是更好的方法呢?
注意:第一个 FROM 括号之间的查询在这个新要求之前运行良好,所以我怀疑那里有问题。或者也许?
编辑:按照 skk 的建议更改第二个 UPDATE 仍然会导致相同的错误(恰好在下面包含 UPDATE 的行上):
UPDATE [Table2]
SET some_column=i.secondid
FROM [Task] JOIN IDS i on i.[id]=[Table2].[id]
WHERE i.id=some_value
【问题讨论】:
-
您是否尝试过使用触发器。我知道它有自己的性能相关问题,但它可能会简化整个任务。
-
为什么要随机修改行?
标签: sql sql-server-2008 select sql-update