问题描述
有一张表的数据是用BULKINSERT将CSV文件一次性插入数据库的,现在我想根据CSV文件名(CSVFileName)更新CSV行号(CSVFileLineNO)怎么实现呢?TABLENAMEAIDCSVFileNameCSVFileLineNOCSVFiled1CSVFiled21name1.CSV12name1.CSV23name1.CSV34name2.CSV15name2.CSV26name2.CSV3当执行每一次BULKINSERT的时候就更新文件名和行号,现在文件名更新了,行号不知道怎么更新。。。大家帮我看看下面语句有什么问题declare@iintset@i=1while@i<=(selectcount(*)ascntfromAwhereCSVFileName='name1.CSV')beginupdatetop(1)AsetCSVFileLineNO=@iwhereCSVFileName='name1.CSV'set@i=@i+1end是不是条件不充分呀需要加CSVFileLineNOisnotnull吗知道结果会
解决方案
解决方案二:
你现在一直只更新第一条数据,应该变更下WHERE条件,使每次更新都是下一条数据UPDATEASETCSVFileLineNO=@iWHEREID=(SELECTTOP1IDFROM(SELECTTOP@iIDFROMAWHERECSVFileName='name1.CSV')ORDERBYIDDESC)
解决方案三:
按照以下执行即可。;WITHCTE_AAS(SELECT*,ROW_NUMBER()OVER(PARTITIONBYCSVFileNameORDERBYIDASC)ASRNFROMA(NOLOCK)WHERECSVFileName='name1.CSV')UPDATECTE_ASETCSVFileLineNo=RN;