繁体   English   中英

批量SQL中出现错误“ WITH语句”

[英]Error 'WITH Statement' in Bulk SQL

嗨,我在创建的存储过程中遇到了问题。 在'@path'附近收到语法错误,语法错误。

如果我将绝对路径设置为“ J:\\ TestCSV \\ ImportData.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

由于某种原因,您必须使用字符串文字。 您可能必须使用动态sql例如

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

问题是您需要在引号附近转义反斜杠:

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

这是因为反斜杠是一个特殊字符,并且由于您对单引号进行了转义,因此它将语句的其余部分视为字符串的一部分。 我在下面为您修复了该问题。

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

您需要在路径中添加引号,以便FROM子句将其读取为'J:\\TestCSV\\ImportData_20170104.csv'而不是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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