排序在SQL Server(Ordering in SQL Server)

2019-10-16 18:33发布

我在那里,我从文本文件导入多行数据的情况。 发生在进口过程中使用SqlBulkCopy的,最初加载到一个临时表。

我对这个数据进行一些验证,并希望能够回报给该文件的行是错误的,如果验证失败的用户。 我希望能简单地用ROW_NUMBER()与SELECT对我的临时表的默认排序一起,但也有一些 问题上已经建议我将无法做到这一点SO。

你会怎么建议允许我保留输入文件的原始顺序的方法? 输入文件格式是TSV。 我是否需要创建显示文件行一个模拟值?

有什么办法来报告在原来插入的顺序查询的结果呢? 我能靠这个给定I使用使用SqlBulkCopy加载日期集体?

Answer 1:

我发现,我能保留使用源表的顺序BULK INSERT到一个文件中,然后通过添加身份。

给定一个制表符分隔的表, C:\MyTable.txt ,其中I故意移动行乱序:

FileName    FileType
wmsetup log
bar txt
wmsetup10   log
WMSysPr9    prx
WMSysPrx    prx
Wudf01000Inst   log
xpsp1hfm    log
_default    pif
0   log
002391_ tmp
005766_ tmp

我跑以下并保存在SQL Server中的文本文件的命令:

IF EXISTS(
    SELECT 1
    FROM sys.tables t
    INNER JOIN sys.schemas s on s.schema_id=t.schema_id
    WHERE t.name='myTable'
    AND t.[type]='U'
    AND s.name='dbo'
)
DROP TABLE myTable
GO

CREATE TABLE dbo.myTable(FileName VARCHAR(80), FileType VARCHAR(30))
GO

BULK INSERT myTable FROM 'C:\MyTable.txt' WITH (
firstrow=2
, fieldterminator='\t'
, rowterminator='\n'
)
GO

ALTER TABLE myTable ADD ID INT IDENTITY(1,1)
GO

SELECT * FROM myTable
GO

结果:

FileName        FileType ID
--------------- -------- -----------
wmsetup         log      1
bar             txt      2
wmsetup10       log      3
WMSysPr9        prx      4
WMSysPrx        prx      5
Wudf01000Inst   log      6
xpsp1hfm        log      7
_default        pif      8
0               log      9
002391_         tmp      10
005766_         tmp      11


文章来源: Ordering in SQL Server