1

我正在使用 BCP 实用程序将数据从 SQL 导出到平面文件,并且导出是分批完成的(使用 -F 和 -L 属性)。但我想编写一个更新查询来识别将在 BCP 之后运行的导出记录(在同一个存储过程中)。

由于我只传递第一行和最后一行号(不是故事 ID)来导出数据,我如何使用这些数据来更新表?

我在找什么:更新'table' Where 'Row from..To'

4

1 回答 1

1

您可以使用ROW_NUMBER()来获取行号,但请注意,您必须为此指定顺序,因此您的 bcp 将需要使用相同的顺序。

ROW_NUMBER()不能出现在 SELECT 或 ORDER BY 之外,因此您需要子查询或 CTE

例如

bcp "select * from `table` order by ID" <other bcp params> -F @First -L @Last

WITH rows AS (
SELECT <columns to be updated>, ROW_NUMBER() OVER ( ORDER BY ID ) rn FROM `table`
)
UPDATE rows
SET <some indicator>
WHERE rn BETWEEN @First AND @Last

SQL 小提琴示例

于 2013-08-08T09:13:22.330 回答