更新使用BCP实用程序导出的记录

时间:2013-08-08 04:18:22

标签: sql sql-update bcp

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

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

我在寻找什么:更新'表''从哪里排'到'

1 个答案:

答案 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

SQL Fiddle Example