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