用新的srids替换原始srids

时间:2011-06-16 16:29:30

标签: sql tsql sql-server-2008 stored-procedures insert

Demo Tables

如您所见,我在这里有2个表,表1和表2.表1中的 srid 列是一个标识列。

表2类似于表1的子表,我们可以使用 srid 列将表2与表1链接起来。

现在我想要实现的是取代原来的 srid ,即1,2,3用新的,即4,5,6,而同时我们保持原来的 crvalue 不变。然后我们将其重新插入表2中。

我发现更换新的srids有点挑战并且卡住了。那么我应该用什么查询/脚本来实现呢?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

WITH ranked AS (
  SELECT
    *,
    rank = ROW_NUMBER() OVER (PARTITION BY uid ORDER BY srid)
  FROM Table1
)
UPDATE t2
SET srid = new.srid
FROM Table2 t2
  INNER JOIN ranked old ON old.uid = 1 AND old.srid = t2.srid
  INNER JOIN ranked new ON new.uid = 2 AND new.rank = old.rank

基本上,您在每个srid组中对uid值进行排名,然后按排名加入这两个子集,以将每个旧srid与新的Table2相关联。当然,您当然也会加入srid旧的{{1}}子集。

答案 1 :(得分:0)

基于这个简单的例子,我认为你可以像这样加入表格

... FROM Table1 INNER JOIN Table2 ON Table1.srid = Table2.srid + 3 ...

然后,您将把Table1.srid和Table2.crvalue插入到新表中。这些结果应该返回您的最后一张表。我希望这会有所帮助。