在SQL存储过程中访问Azure Blob存储时如何纠正“操作系统错误代码12007”

时间:2019-05-10 16:36:23

标签: sql azure azure-sql-database azure-storage azure-storage-blobs

我正在尝试创建一个存储过程,该过程将访问azure blob存储容器中的文件,将文件的第一行存储在一个临时文件中,使用此数据创建一个表(有效地使用表头字段文件作为列标题),然后使用其余数据填充文件。

我已经在计算机上使用本地源文件尝试了本地SQL数据库中的基本过程,并且该过程本身可以按照我的意愿工作,并从提供的文件中创建了一个新表。

但是,当我在Azure SQL数据库中进行设置并将其修改为使用“数据源”而不是将其指向本地文件时,会产生以下错误:

 Cannot bulk load because the file "my_example_file" could not be opened. Operating system error code 12007(failed to retrieve text for this error. Reason: 317).

我的存储过程包含以下内容:

 CREATE TABLE [TempColumnTitleTable] ([ColumnTitles] [nvarchar](max)
 NULL);
 DECLARE @Sql NVARCHAR(Max) = 'BULK INSERT [dbo].   
 [TempColumnTitleTable]     FROM ''' + @fileName + ''' WITH
 (DATA_SOURCE     = ''Source_File_Blob'', DATAFILETYPE = ''char'', 
 FIRSTROW = 1, LASTROW =     1,     ROWTERMINATOR = ''0x0a'')';
 EXEC(@Sql);

上面应该创建一个包含所有标题文本的列表,然后我可以查询该表并将其用于永久文件中的列标题。 我将数据源设置如下:

 CREATE EXTERNAL DATA SOURCE Source_File_Blob
 WITH ( 
 TYPE       = BLOB_STORAGE,
 LOCATION   = 'location_url',
 CREDENTIAL = AzureBlobCredential
 );

具有适当的凭据!

我期望它填充我的临时列标题文件(然后继续进行上面未显示代码的其他填充),但它只会返回所提到的错误代码。

我有一个Google,但是错误代码似乎与其他“路径”类型的问题有关,我认为此处不适用。

我们有类似的过程,它们使用具有相同凭据的Blob存储,它们似乎都可以正常工作,但是问题是编写它们的人不再在我们公司工作,所以我实际上无法咨询他们!

因此,基本上,什么将导致该错误?我不认为这是访问权限,因为我可以在其他Blob上运行类似的进程,而且据我所知,这些级别的访问权限级别相同。

1 个答案:

答案 0 :(得分:0)

是-使用错误的URL作为前缀。直到我终于可以访问我意识到的Blob存储。