2017-10-24 7 views
1

여기에 거래가 있습니다. C#에서 배열을 받았습니다. @idUser int@idRegion int 인 2 개의 열만있는 다음 테이블에 삽입하려고합니다.이 간단한 저장 프로 시저가 작동하지 않는 이유

저장 프로 시저가 배열을 받아 테이블에 삽입해야하지만 어떻게 든 작동하지 않으면 @idRegion을 int로 변환 할 수 없다고 알려줍니다. CASTCONVERT을 int로 변환하려고 시도했지만 작동하지 않습니다.

Select From은 정상적으로 작동하지만 삽입되지는 않습니다. NVARCHAR 값을 변환 할 때

변환 실패 : 그것을 실행 때이 오류가

@idUser int, 
    @idRegion nvarchar(MAX) 
AS 
BEGIN 
    INSERT INTO [UsersRegion] (idUser,IdRegion) 
    VALUES (@idUser, @idRegion) 
    SELECT @idUser,cast(value as int) FROM STRING_SPLIT(@idRegion,',') 
END 

: 여기

저장 프로 시저 ( @idUser 필요가 삽입 된 모든 행에 대해 동일하게)입니다 '1,2,3,4'를 데이터 유형 int로 변경하십시오.

답변

0

INSERT 문은 IdRegion으로 작동하는 것 같지만 나머지는 모두 소문자 id입니다.
@idRegion nvarchar(MAX)
가 @idRegion 변수를 선언하는 :

그러나이 가정은

귀하의 문제가 가장 가능성이 읽어 줄은 ... 실제 테이블 열라는 방법이며, 오타 아니다 당신이 질문에 진술 한 동안 그것은 int 인 것을 의미합니다. 이것은 캐스팅 오류를 설명합니다.

C# 코드에서 프로 시저로 int로 전달할 수없는 경우. 당신의 유일한 다른 옵션은 당신이 말했듯이 그것을 int로 파싱하려고 시도하는 것입니다.

+0

캐스트와 변환이 작동하지 않는 것 같습니다 : ( – Dog

+0

오 숫자는 숫자의 배열이 아닐까요? 그게 제가 두려워하는 것을 도와주지 않을 것입니다 ... 코드 Yoshi가 제대로 된 것 같아요. –

2

@idRegion에 여러 개의 값을 보내는 경우 분리 할 때 삽입해야 할 항목이 둘 이상있을 수 있습니다. 따라서, 이런 식으로 작업을 수행합니다

모든 레코드에 대해 동일한 @idUser를 삽입하는 코드 위
SELECT @idUser, cast(value as int) FROM STRING_SPLIT(@idRegion, ',') 

하지만 :

INSERT INTO [UsersRegion] (idUser,IdRegion) 
SELECT @idUser, value FROM STRING_SPLIT(@idRegion, ',') 

대상 테이블의 IdRegion 열 유형 int의 경우이 같은 캐스팅 할 필요가 분할 된 항목에 따라 IdRegion의 다른 값. Insert into select from

+0

좋아 보이는데 sp를 실행할 때 문자열을 수동으로 입력하려고하면 같은 오류가 발생합니다. nvarchar 값 '1,2,3,4 '을 데이터 유형 int로 변경하십시오. – Dog

+0

@Dog 삽입하려는 테이블에 int 열이있는 경우 다음과 같이 캐스팅해야합니다 :'SELECT @idUser, cast (value as int) FROM STRING_SPLIT (@idRegion, ',') ' – CodingYoshi

+0

고맙습니다. 다음 시도하고 있지만 '값', 잘못된 열 이름 '값'오류가 발생합니다. '@DUUser, cast (value as int) From Viridis.dbo.Split (@idRegion, ',') ' – Dog