Вы можете сохранить файл с помощью хранимой процедуры:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[spStoreBinaryFiles]
@FILE_PATH VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @FILE_LENGTH BIGINT
DECLARE @FILE_DATA VARBINARY(MAX)
DECLARE @FILE_NAME VARCHAR(100)
DECLARE @DOCUMENT_NAME VARCHAR(100)
DECLARE @DOCUMENT_NATURE VARCHAR(5)
DECLARE @VAL1 VARCHAR(100)
DECLARE @VAL2 VARCHAR(100)
DECLARE curDOCUMENTS CURSOR FOR
SELECT *
FROM dbo.SPLIT ( ';', @FILE_PATH)
OPEN curDOCUMENTS
FETCH NEXT FROM curDOCUMENTS INTO @VAL1, @VAL2
WHILE @@FETCH_STATUS = 0
BEGIN
IF OBJECT_ID('#ORStable') IS NULL
BEGIN
CREATE TABLE #ORStable _
(Length BIGINT, vDocument VARBINARY(MAX))
DECLARE @SQL_QUERY NVARCHAR(1000)
SET @SQL_QUERY = 'INSERT INTO #ORStable
SELECT len(bulkcolumn), *
FROM OPENROWSET(BULK '''+@VAL2+''', _
SINGLE_BLOB) AS BinaryData'
EXEC SP_executesql @SQL_QUERY
END
EXEC dbo.spGetDocumentNature @VAL2, @DOCUMENT_NATURE OUTPUT
EXEC dbo.spGetDocumentName @VAL2, @DOCUMENT_NAME OUTPUT
SELECT TOP 1 @FILE_LENGTH = Length, @FILE_DATA = vDocument
FROM #ORStable
INSERT INTO dbo.tblBinaryFiles ([File], [Path], [Ext], [Size],[Binary])
VALUES (@DOCUMENT_NAME, @VAL2, @DOCUMENT_NATURE, @FILE_LENGTH, @FILE_DATA)
DROP TABLE dbo.#ORStable
FETCH NEXT FROM curDOCUMENTS INTO @VAL1, @VAL2
END
CLOSE curDOCUMENTS
DEALLOCATE curDOCUMENTS
END
Теперь вы можете вызвать эту хранимую процедуру следующим образом:
DECLARE @SQL_QUERY NVARCHAR(1000)
SET @SQL_QUERY= '
INSERT INTO #ORStable
SELECT len(bulkcolumn), *
FROM OPENROWSET(BULK '''+@VAL2+''', _
SINGLE_BLOB) AS BinaryData'
exec SP_executesql @SQL_QUERY
Здесь переменная VAL2
содержит один файлинформация о пути.
Пример
VAL2 = "\\192.168.1.1\myFiles\yourfile.pdf"
VAL2 = "C:\yourFilesFolder\yourfile.pdf"
Примечание : Если вы используете какой-либо сетевой путь или прямой путь, убедитесь, что ваша папка имеет разрешение на чтение и запись