我正在尝试创建一个存储过程,该过程将访问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上运行类似的进程,而且据我所知,这些级别的访问权限级别相同。
答案 0 :(得分:0)
是-使用错误的URL作为前缀。直到我终于可以访问我意识到的Blob存储。