У меня есть файл на удаленной машине, который я хочу скопировать на хост-машину SQL Server в определенную область. Мне интересно, какие у меня варианты для этого, с помощью хранимой процедуры SQL Server, и, более конкретно, я хочу передать содержимое файла, а не сначала считывать все содержимое в память.Можно ли передать файл в хранимую процедуру SQL Server?
Я в основном ищу текшую версию этого:
CREATE PROCEDURE [dbo].[SaveFile]
(@filename nvarchar(255), @contents nvarchar(max))
AS
BEGIN
DECLARE @ObjectToken INT
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'WriteText', NULL, @contents
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'C:\\Destination\\' + @filename, 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken
END
- Могу ли я иметь
filestream
или что-то эквивалент в качестве сохраненного входного параметра процедуры? - Есть ли хранимая процедура CLR обрабатывать поток?
- Возможно, одна процедура может открыть поток и вернуть
@ObjectToken
, другой могWriteText
кусок из потока, а третья процедура можетSaveToFile
иClose
, но это, кажется, как!a.GoodIdea
и я должен был бы обеспечить закрытие и разрушение через какой-то тайм-аут. - Другие варианты?
Это время источников из C# консольного приложения, и я бы предпочел, чтобы поток этих больших файлов, а не что-то вроде File.ReadAllText()
, загружая строку многогигабайтных в переменную, а затем вызов хранимой процедуры со всем содержимым файла.
мои два цента, получить учетную запись Azure и использовать их API хранения. – ScarletMerlin
Облачное хранилище Azure даже не является удаленной возможностью. – Ehryk