简体   繁体   中英

Error 'WITH Statement' in Bulk SQL

Hi I am having problem with the stored procedure that I created. I got a syntax error with Incorrect syntax near '@path' .

If I put the absolute path 'J:\\TestCSV\\ImportData.csv' I don't received any error. But if I declare parameters, I received this error that I mentioned above. Here's my stored procedure. Hoping for your helping hand.

Create PROCEDURE [dbo].[FileUpload]

 As
BEGIN


DECLARE @path VARCHAR(256); -- path   
DECLARE @fileName VARCHAR(256); -- filename   
DECLARE @fileDate VARCHAR(20); -- used for file date
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ;
SET @fileName = 'ImportData' + '_' + @fileDate + '.csv';
SET @path = 'J:\TestCSV\' + @fileName;

BULK

INSERT [dbo].[temp_Cemetery]
--FROM 'E:\CSVTest\ImportDataYYYYMMDD.csv'
FROM @path  -- Error Here Incorrect syntax near '@path'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)


END

You have to use a string literal for some reason. You'll probably have to use dynamic sql eg

CREATE PROCEDURE [dbo].[FileUpload]
AS
BEGIN


DECLARE @path VARCHAR(256); -- path   
DECLARE @fileName VARCHAR(256); -- filename   
DECLARE @fileDate VARCHAR(20); -- used for file date
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ;
SET @fileName = 'ImportData' + '_' + @fileDate + '.csv';
SET @path = 'J:\\TestCSV\\' + @fileName;
DECLARE @sql varchar(8000)

SET @sql = 'BULK INSERT [dbo].[temp_Cemetery]
FROM ''' + @path + '''
WITH
(
    FIELDTERMINATOR = '','',
    ROWTERMINATOR = ''\n''
)'

EXEC (@sql)

END

The issue is you needed to escape the backslash near the quote:

SET @path = 'J:\\TestCSV\\' + @fileName;

This is because the backslash is a special character and since you escaped the single quote it treated the rest of the statement as part of the string. I fixed it for you below.

Create PROCEDURE [dbo].[FileUpload]

 As
BEGIN


DECLARE @path VARCHAR(256); -- path   
DECLARE @fileName VARCHAR(256); -- filename   
DECLARE @fileDate VARCHAR(20); -- used for file date
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ;
SET @fileName = 'ImportData' + '_' + @fileDate + '.csv';
SET @path = 'J:\\TestCSV\\' + @fileName;

BULK

INSERT [dbo].[temp_Cemetery]
--FROM 'E:\CSVTest\ImportDataYYYYMMDD.csv'
FROM @path  -- Error Here Incorrect syntax near '@path'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)


END

You need to add quotes to the path so that your FROM clause reads it as 'J:\\TestCSV\\ImportData_20170104.csv' instead of J:\\TestCSV\\ImportData_20170104.csv

Create PROCEDURE [dbo].[FileUpload]

 As
BEGIN


DECLARE @path VARCHAR(256); -- path   
DECLARE @fileName VARCHAR(256); -- filename   
DECLARE @fileDate VARCHAR(20); -- used for file date
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) ;
SET @fileName = 'ImportData' + '_' + @fileDate + '.csv';
SET @path = '''J:\TestCSV\' + @fileName +'''';



BULK
INSERT [dbo].[temp_Cemetery]
--FROM 'E:\CSVTest\ImportDataYYYYMMDD.csv'
FROM @path  -- Error Here Incorrect syntax near '@path'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)


END

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM