2017-01-04 9 views
0

こんにちは私が作成したストアドプロシージャに問題があります。 の構文エラーがあります。 '@path'の近くの構文が正しくありません'Statement' in Bulk SQL

絶対パス '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 
+0

の可能性のある重複した[ファイル名パラメータで一括挿入](HTTPとしてそれを読み取るようにパスに引用符を追加する必要があります。 com/questions/7306616/bulk-insert-with-filename-parameter) –

答えて

1

何らかの理由で文字列リテラルを使用する必要があります。たとえば、動的SQLを使用する必要があります。 // stackoverflowの:

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 
+0

これは働いています....ありがとうございました.. –

0

問題は、あなたが引用符の近くにバックスラッシュをエスケープするのに必要である:

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 
+1

'@path'の近くに同じエラーがあります。 メッセージ319、レベル15、状態1、プロシージャMPGUpload、行25 キーワード 'with'の近くに構文が正しくありません。このステートメントが共通テーブル式、xmlnamespaces句、または変更トラッキングコンテキスト句である場合、前のステートメントはセミコロンで終わらなければなりません –

0

はあなたの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 
+0

ありがとうございます。 –