我正在使用 BCP 实用程序将数据从 SQL 导出到平面文件,并且导出是分批完成的(使用 -F 和 -L 属性)。但我想编写一个更新查询来识别将在 BCP 之后运行的导出记录(在同一个存储过程中)。
由于我只传递第一行和最后一行号(不是故事 ID)来导出数据,我如何使用这些数据来更新表?
我在找什么:更新'table' Where 'Row from..To'
我正在使用 BCP 实用程序将数据从 SQL 导出到平面文件,并且导出是分批完成的(使用 -F 和 -L 属性)。但我想编写一个更新查询来识别将在 BCP 之后运行的导出记录(在同一个存储过程中)。
由于我只传递第一行和最后一行号(不是故事 ID)来导出数据,我如何使用这些数据来更新表?
我在找什么:更新'table' Where 'Row from..To'
您可以使用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