我正在使用BCP实用程序将数据从SQL导出到平面文件,并且导出是批量完成的(使用-F和-L属性)。但是我想写一个Update查询来识别将在BCP之后运行的导出记录(在相同的存储过程中)。
由于我只是传递第一个和最后一个行号(不是故事ID)来导出数据,我如何使用这些数据来更新表?
我在寻找什么:更新'表''从哪里排'到'
答案 0 :(得分:1)
您可以使用ROW_NUMBER()
获取行号,但请注意您必须指定行号,因此您的bcp需要使用相同的顺序。
ROW_NUMBER()
不能出现在SELECT或ORDER BY之外,因此您需要子查询或CTE
E.g。
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