저장 프로시저를 통한 대량 삽입: 오류 해결
작업 중인 대량 삽입 쿼리를 저장 프로시저로 캡슐화하려는 시도에서 사용자가 BULK INSERT 문 내에서 파일 변수를 활용할 때 오류가 발생합니다. 사용자의 저장 프로시저 코드는 다음과 같습니다.
create proc dbo.InsertZipCode @filepath varchar(500)='e:-digit Commercial.csv' as begin BULK INSERT ZIPCodes FROM @filepath WITH ( FIRSTROW = 2 , FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) end
그러나 이 코드로 인해 다음과 같은 오류가 발생했습니다.
Msg 102, Level 15, State 1, Procedure InsertZipCode, Line 6 Incorrect syntax near '@filepath'. Msg 319, Level 15, State 1, Procedure InsertZipCode, Line 7 Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
이 문제의 핵심은 BULK INSERT를 수행할 수 없다는 것입니다. 파일 이름을 변수로 허용합니다. 다음과 같은 문은 유효합니다.
BULK INSERT ZIPCodes FROM 'e:-digit Commercial.csv' WITH
BULK 내에서 파일 이름 변수(예: DECLARE @filename VARCHAR(255) SET @filename = 'e:5-digit Commercial.csv') 사용 INSERT 문은 필연적으로 실패합니다.
이 문제를 해결하기 위해 실행 가능한 한 가지 접근 방식은 BULK를 구성하는 것입니다. INSERT 문을 문자열(고정된 파일 이름 포함)로 만들고 sp_executesql을 사용하여 동적으로 실행합니다.
DECLARE @filepath nvarchar(500) SET @filepath = N'e:-digit Commercial.csv' DECLARE @bulkinsert NVARCHAR(2000) SET @bulkinsert = N'BULK INSERT ZIPCodes FROM ''' + @filepath + N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')' EXEC sp_executesql @bulkinsert
이러한 지침을 준수하면 BULK INSERT에서 파일 이름 변수를 허용할 수 없는 문제를 피할 수 있습니다. 대량 삽입을 실행하는 저장 프로시저의 성공적인 생성.
위 내용은 SQL Server 대량 삽입 저장 프로시저에서 ''@filepath' 근처의 잘못된 구문' 오류를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!