2013-11-24 49 views
0

我在MSSQL Server中使用multipe union d语句,在结果中很难找到唯一的列。ROW_NUMBER如何与插入一起使用?

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

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

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

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

如果不是,(如我所想),有没有其他的选择?

谢谢。

回答

1

在没有看到SQL我只能给最普遍的回答是MS SQL不保证select语句的顺序没有秩序子句,以便将意味着row_number可能不是插入顺序。

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 
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 
相关问题