** Сценарий: **
- Хранимая процедура SQL принимает в качестве входных данных fileName.
- Прочитайте содержимое файла и вставьте его в таблицу.
Для локального сервера SQL вышеприведенный сценарий был достигнут с помощью следующей хранимой процедуры.
-- @_filePath would be input to the store procedure
DECLARE @_filePath NVARCHAR(MAX) = 'C:\SQLContent\test1.sql'
CREATE TABLE tmpTable (tmpIndex INT NOT NULL IDENTITY PRIMARY KEY CLUSTERED, sqlContent NVARCHAR(MAX) NOT NULL)
-- Read content of the file @_filePath
DECLARE @_insertQuery NVARCHAR(MAX) = 'insert tmpTable (sqlContent) select * from OPENROWSET(bulk ''' + @_filePath + ''', SINGLE_CLOB) as a'
EXEC sp_ExecuteSql @_insertQuery
Select * from tmpTable
Проблема:
Фактическая проблемас сервером SQL Azure, путь, указанный в вышеупомянутой хранимой процедуре, не будет доступен для сервера SQL.
C: \ SQLContent \ test1.sql
Сообщение об ошибке в SQL Azure:
Невозможно выполнить массовую загрузку, поскольку файл "C: \ SQLContent \ test1.sql" не может быть открыт.Код ошибки операционной системы (ноль).
Возможные решения:
- Загрузить файл test1.sql в BLOB-объект Azure и прочитать хранимую процедуру в файлесодержимое из большого двоичного объекта выглядит следующим образом:
select *
from OPENROWSET
(BULK 'temp1.sql', DATA_SOURCE = 'MyAzureStorage', SINGLE_CLOB) as data
Ссылка - [ ошибка при выполнении OPENROWSET (BULK) / База данных SQL Azure
Вместо передачи @_filePath в качестве аргумента хранимой процедуры, передайте содержимое файла в качестве аргумента хранимой процедуре.
Ask
Outиз двух возможных решений проблемы, какое из них является лучшим и почему?
Кроме того, предложите, если есть какой-либо другой лучший подход.