2013-11-24 68 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 
相關問題