2012-02-15 4 views
0

최근에 JSON 직렬화를 사용하여 매개 변수 배열을 SQL Server 저장 프로 시저에 전달하는 팀에 합류했습니다. SQL Server 저장 프로 시저에서는 deserialize되고 필요한 값이 추출됩니다. 즉, 각 저장 프로 시저에는 '@Parameters 'VARCHAR (MAX) 유형의 매개 변수. 명령을 만들고 실행하는 프레임 워크는 C#으로 작성되며 표준 .NET 유형 (SqlCommand, SQlParameter)을 사용합니다.JSON 직렬화 및 .NET SQL 매개 변수

직렬화 된 내용의 길이가 저장 프로 시저가 적절하지 않은 임계 값보다 길 때 실행되지만 예외는 발생하지 않습니다. 아무 일도 일어나지 않는 것 같습니다. SQL 프로파일 러 실행 SQL Server에서 저장 프로 시저를 실행하려는 시도가 없음을 확인했습니다.

예 : 하나의 경우에는 8 개 이하의 속성이 직렬화되는 형식의 인스턴스가 30 개에 불과합니다. 직렬화가 성공하고 값은 SqlCommand의 매개 변수 컬렉션에있는 sql 매개 변수에 할당됩니다 (단 하나의 매개 변수 만 있음). 명령이 실행되지만 아무 일도 일어나지 않습니다. 유형의 발생이 적 으면 성공합니다. 성공하지 못하면 예외가 발생하지 않습니다.

사용 : SQL Server 2008 C# .NET 4.0 JSON 직렬화는 Newtonsoft에서 제공합니다. 코드의 SqlParameter는 varchar max로 만들어집니다. 클라이언트 서버 아키텍처 - 중간 서비스가 없습니다.

SqlCommand를 사용하여 SQL 매개 변수로 전달되는 JSON serialize 된 값의 한계를 알고 있거나이 동작을 일으킬 수있는 아이디어가 있습니까?

+0

샘플 @Parameters 값을 제공해 주시겠습니까? –

+0

정확하게 형성되는 내용 자체가 아니라 내용의 길이에 문제가 있습니다. SQL 매개 변수로 Json 직렬화 된 값을 전달할 때 누군가가 크기 제한을 알고 있는지 여부 만 묻는 것은 사실입니다. – Trev

답변

0

내 경우에 무슨 일이 일어 났는지 알아 냈습니다. SQL 매개 변수에서 값의 serialziation과 아무 관련이 없습니다. 프로 시저가 결국 실행될 때까지 충분히 기다렸다가 (5 ~ 7 분)

저장 프로 시저에 커서가 관심 레코드를 추출하는 데 사용됩니다 (이것은 배치 업데이트 절차입니다). 이 커서는 CLR 함수를 호출하여 필요한 각 값에 대해 Json을 비 직렬화합니다. 커서에 사용하기 위해 임시 테이블에 desirialized 데이터를 삽입하여 'issue'가 해결되었습니다.