ROW_NUMBER如何与插入一起使用?

时间:2013-11-24 18:16:23

标签: sql-server tsql solr row-number

我在MSSQL Server中有多个union d语句,很难在结果中找到唯一的列。

我需要每行都有一个唯一值,所以我使用了ROW_NUMBER()函数。

此结果集正被复制到其他地方(实际上是SOLR索引)。

下次我将运行相同的query,我只需要选择新添加的行。 所以,我需要确认一下,新添加的行将在最后一次的row_number值之后编号。

换句话说,ROW_NUMBER函数是否按插入顺序对结果进行排序 - 假设我没有添加任何ORDER BY子句?

如果不是,(我认为),还有其他选择吗?

感谢。

3 个答案:

答案 0 :(得分:1)

我想你可以做这样的事情......

;WITH
  cte 
  AS
  (
    SELECT * , rn = ROW_NUMBER() OVER (ORDER BY SomeColumn)
    FROM
    (
    /* Your Union Queries here*/
    )q
  )
  INSERT INTO Destination_Table
SELECT * FROM
CTE  LEFT JOIN Destination_Table
ON CTE.Refrencing_Column = Destination_Table.Refrencing_Column
WHERE Destination_Table.Refrencing_Column IS NULL

答案 1 :(得分:1)

在没有看到sql的情况下,我只能给出一般答案,即MS Sql不保证没有order子句的select语句的顺序,这样就意味着row_number可能不是插入顺序。

答案 2 :(得分:0)

我建议您考虑将行加上时间戳'加时间'。或者在表格中添加标识列。

但是你想要做的是获取当前的最大ID,然后将row_number添加到它。

Select col1, col2, mid + row_number() over(order by smt) id
From (
    Select col1, col2, (select max(id) from tbl) mid
    From query
) t