![](/img/trans.png)
[英]107095 : Error while Bulk insert in Microsoft SQL Server : All columns of the table must be specified in the Insert Bulk statement
[英]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.