Sql server 如何将行数与插入一起使用?

Sql server 如何将行数与插入一起使用?,sql-server,tsql,solr,row-number,Sql Server,Tsql,Solr,Row Number,我在MSSQL服务器中有多个uniond语句,很难在结果中找到唯一的列 我需要每行有一个唯一的值,所以我使用了row\u NUMBER()函数 此结果集正在复制到其他位置(实际上是SOLR索引) 下次我将运行相同的查询,我只需要选择新添加的行。 因此,我需要确认,新添加的行将在上次的row\u number值之后进行编号 换句话说,行号函数是否按照插入顺序对结果排序-假设我没有添加任何order BY子句? 如果没有,(如我所想),还有其他选择吗 谢谢。我想你可以这样做 ;WITH cte

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

我需要每行有一个唯一的值,所以我使用了
row\u NUMBER()
函数

此结果集正在复制到其他位置(实际上是SOLR索引)

下次我将运行相同的
查询
,我只需要选择新添加的行。 因此,我需要确认,新添加的行将在上次的
row\u number
值之后进行编号

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

如果没有,(如我所想),还有其他选择吗


谢谢。

我想你可以这样做

;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

<> P.>没有看到SQL,我只能给出一般的答案,即MSSQL不保证没有顺序子句的SELECT语句的顺序,这意味着ROWL号可能不是插入顺序。

< P>我建议您在插入时考虑行的“时间戳”。或向表中添加标识列

但是,听起来您想要做的是获取当前的max id,然后将行号添加到其中

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