Tsql 批量导入Azure

Tsql 批量导入Azure,tsql,azure-sql-database,bulkinsert,Tsql,Azure Sql Database,Bulkinsert,对于批量插入,我有一个数据文件和一个xml格式文件 File.dat File.xml 这是一个大容量Insert语句,但在Azure中,它似乎与格式文件有问题。以下是我采取的步骤 设置存储访问权限 创建了共享访问签名 将容器访问策略设置为“仅对Blob进行Blob匿名读取访问” 创建数据库范围的凭据以访问存储 创建外部数据源 他们都没有处理错误 '无法大容量加载,因为文件已完成或无法读取' 但是,如果我可以成功运行以下查询 SELECT * FROM OPENROWSET( BULK

对于批量插入,我有一个数据文件和一个xml格式文件

File.dat File.xml 这是一个大容量Insert语句,但在Azure中,它似乎与格式文件有问题。以下是我采取的步骤

设置存储访问权限

创建了共享访问签名 将容器访问策略设置为“仅对Blob进行Blob匿名读取访问” 创建数据库范围的凭据以访问存储

创建外部数据源

他们都没有处理错误

'无法大容量加载,因为文件已完成或无法读取'

但是,如果我可以成功运行以下查询

SELECT * FROM OPENROWSET(
    BULK 'File.xml', 
    DATA_SOURCE = 'Storage',
    SINGLE_NClob) AS DataFile

使用bcp命令创建格式文件,指定格式参数,并使用nul而不是数据文件路径。format选项始终需要-f选项,要创建XML格式文件,还必须指定-x选项。此外,对于本例,限定符c用于指定字符数据,t用于指定逗号作为字段终止符,t用于使用集成安全性指定可信连接。在命令提示下,输入以下命令:

bcp TestDatabase.dbo.myFirstImport format nul -c -x -f D:\BCP\myFirstImport.xml -t, -T
在Microsoft SQL Server Management Studio SSMS中执行以下Transact-SQL:

USE TestDatabase;  
GO

TRUNCATE TABLE myFirstImport; -- (for testing)
INSERT INTO dbo.myFirstImport 
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myFirstImport.bcp',
        FORMATFILE = 'D:\BCP\myFirstImport.xml'  
       ) AS t1;
GO

-- review results
SELECT * FROM TestDatabase.dbo.myFirstImport;

参考文档:

使用bcp命令创建格式文件,指定格式参数并使用nul而不是数据文件路径。format选项始终需要-f选项,要创建XML格式文件,还必须指定-x选项。此外,对于本例,限定符c用于指定字符数据,t用于指定逗号作为字段终止符,t用于使用集成安全性指定可信连接。在命令提示下,输入以下命令:

bcp TestDatabase.dbo.myFirstImport format nul -c -x -f D:\BCP\myFirstImport.xml -t, -T
在Microsoft SQL Server Management Studio SSMS中执行以下Transact-SQL:

USE TestDatabase;  
GO

TRUNCATE TABLE myFirstImport; -- (for testing)
INSERT INTO dbo.myFirstImport 
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myFirstImport.bcp',
        FORMATFILE = 'D:\BCP\myFirstImport.xml'  
       ) AS t1;
GO

-- review results
SELECT * FROM TestDatabase.dbo.myFirstImport;

参考文件:

我已经找到了答案,我将自己发布,以防其他人也遇到这个问题

格式文件的数据源应单独指定。我尝试了微软文档中指定的方法

但是,参数名称中有一个错误。它说明正确的参数是“FORMATFILE\u数据源”,但它应该是“FORMATFILE\u数据源”。这在底部有注释

BULK INSERT <Schema>.<Table>
FROM 'File.dat'
WITH (
    DATA_SOURCE = 'Storage',
    FORMATFILE = 'File.xml',
    FORMATFILE_DATA_SOURCE = 'Storage'
)

我已经找到了答案,我将自己发布,以防其他人也遇到这个问题

格式文件的数据源应单独指定。我尝试了微软文档中指定的方法

但是,参数名称中有一个错误。它说明正确的参数是“FORMATFILE\u数据源”,但它应该是“FORMATFILE\u数据源”。这在底部有注释

BULK INSERT <Schema>.<Table>
FROM 'File.dat'
WITH (
    DATA_SOURCE = 'Storage',
    FORMATFILE = 'File.xml',
    FORMATFILE_DATA_SOURCE = 'Storage'
)

这有帮助吗:@TheGameiswar谢谢,但我正在使用XML,我已经看到了这篇文章,并尝试使用XML文件!这有帮助吗:@TheGameiswar谢谢,但我正在使用XML,我已经看到了这篇文章,并尝试使用XML文件!谢谢你的说明,但是这不是我问题的答案。这不是特定于Azure的,而是用于本地批量导入。除此之外,正如我所说,bcp文件已经在本地运行。感谢您提供的规范,但这并不是我问题的答案。这不是特定于Azure的,而是用于本地批量导入。除此之外,正如我所说,bcp文件已经在本地工作。
BULK INSERT <Schema>.<Table>
FROM 'File.dat'
WITH (
    DATA_SOURCE = 'Storage',
    FORMATFILE = 'File.xml',
    FORMATFILE_DATA_SOURCE = 'Storage'
)