我在MSSQL Server中有多个union
d语句,很难在结果中找到唯一的列。
我需要每行都有一个唯一值,所以我使用了ROW_NUMBER()
函数。
此结果集正被复制到其他地方(实际上是SOLR索引)。
下次我将运行相同的query
,我只需要选择新添加的行。
所以,我需要确认一下,新添加的行将在最后一次的row_number
值之后编号。
换句话说,ROW_NUMBER
函数是否按插入顺序对结果进行排序 - 假设我没有添加任何ORDER BY
子句?
如果不是,(我认为),还有其他选择吗?
感谢。
答案 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