MS SQl. Как передать путь к файлу в качестве параметра для хранимой процедуры

Мне нужно получить путь к файлу и после этого выполнить массовую вставку из этого файла в таблицу. Путь может меняться, поэтому хочу передавать его как параметр.

CREATE PROCEDURE UploadData
@FilePath NVARCHAR(50)
AS
BEGIN
    IF OBJECT_ID('TestDB.dbo.##[#TempData]', 'U') IS NOT NULL
  DROP TABLE #TempData; 
    Create Table [dbo].[#TempData]([Name] NVARCHAR(10),[Code] NVARCHAR(200))
BULK INSERT [#TempData]
FROM @FilePath
WITH (FIELDTERMINATOR = ';')
select * from #TempData
END;
exec UploadData 'C:/Users/Documents/1.txt'

Но с параметром вставка не работает. Можно ли как-то передать путь в качестве параметра?


Ответы (1 шт):

Автор решения: Yitzhak Khabinsky

Как сказал @Akina.

Вместо следующих строк:

BULK INSERT [#TempData]
FROM @FilePath
WITH (FIELDTERMINATOR = ';')

Используйте следующее:

DECLARE @sql NVARCHAR(1024);

SET @sql = N'BULK INSERT [#TempData]
FROM ' + QUOTENAME(@FilePath, NCHAR(39)) +
' WITH (FIELDTERMINATOR = '';'')';

--PRINT @sql;
EXEC sp_executesql @sql;
→ Ссылка