SQL 服务器:Select 数据来自带有 OPENROWSET 和 BULK 的制表符分隔文件 returns 空结果

SQL Server: Select data from tab delimited file with OPENROWSET and BULK returns empty result

我想使用 SQL 服务器和 OPENROWSET 从制表符分隔的文件中查询数据。

我有以下示例源文件:

FirstName   LastName    EMail
Marny   Haney   sed.dictum.eleifend@sem.com
Alexa   Carpenter   Vivamus.non.lorem@consectetuereuismod.com
Wyatt   Mosley  est@tortoratrisus.org
Cedric  Johns   lectus.a.sollicitudin@quisurna.ca
Lavinia Fischer nibh@insodales.net
Vera    Marshall    scelerisque@sapienAeneanmassa.co.uk
Beau    Frost   vel.quam.dignissim@mauris.net
Halla   Fisher  amet.metus.Aliquam@ullamcorpervelit.co.uk
Sierra  Randall Nulla@magnis.net
Noel    Malone  semper@porttitor.org

我正在使用以下格式文件:

12.0
3
1     SQLCHAR        0     5           ""      1     FirstName                                                   SQL_Latin1_General_CP1_CI_AS
2     SQLCHAR        0     5           ""      2     LastName                                                    SQL_Latin1_General_CP1_CI_AS
3     SQLCHAR        0     27          "0x0A"  3     EMail                                                       SQL_Latin1_General_CP1_CI_AS

我正在尝试使用以下语句从文件中查询数据:

SELECT *
FROM
    OPENROWSET(
        BULK 'C:\data\Source\sample_data.dwo'
        ,FORMATFILE= 'C:\data\Format\sample_data.FMT'
        ,FIRSTROW = 2
        ) AS a

不幸的是,查询returns一个空的结果。我没有收到错误。

据我了解,字段的默认终止符是 \t。我也尝试使用 t\t 明确地作为终止符,但仍然没有结果。

有什么建议我接下来可以尝试吗?

Link 到两个文件:
https://github.com/LordTakeshiXVII/files/blob/master/sample_data.FMT
https://github.com/LordTakeshiXVII/files/blob/master/sample_data.dwo

您需要调整格式文件:

  • 首先将字段的最大长度更改为适当的值(示例中为 100)- 您也可以将其设置为零以获得无限输入长度。
  • 其次将前两个字段的终止符设置为 \t,将第三个字段的终止符设置为 \r\n
12.0
3
1  SQLCHAR  0  100  "\t"    1  FirstName  SQL_Latin1_General_CP1_CI_AS
2  SQLCHAR  0  100  "\t"    2  LastName   SQL_Latin1_General_CP1_CI_AS
3  SQLCHAR  0  100  "\r\n"  3  EMail      SQL_Latin1_General_CP1_CI_AS

您可以在此处找到有关格式文件的更多信息:https://docs.microsoft.com/en-us/sql/relational-databases/import-export/create-a-format-file-sql-server?view=sql-server-2017