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;