SQL Server 2008은 사용자 정의 테이블 형식을 만들고 부모 ID 목록을 전달하거나 처음에 부모 ID를 얻고 테이블에 조인하는 데 사용한 논리를 사용할 수 있습니다 자식 데이터를 보유합니다.
CREATE TYPE [dbo].[Int32List]
AS TABLE (
[ID] int NOT NULL
);
GO
그리고 당신의 저장된 프로 시저가이 같은 간다 :
는 이런 일을하기 위해선, 테이블 유형을 만들려면
CREATE PROCEDURE [dbo].[MyStoredProc]
@ParentIDTable [dbo].[Int32List] READONLY
AS
--logic goes here
GO
을 그리고 당신은이처럼 C# 코드에서 해당 프로 시저를 호출 :
DataTable ParentIDs = new DataTable();
ParentIDs.Columns.Add("ID", typeof(int));
SqlConnection connection = new SqlConnection(yourConnectionInfo);
SqlCommand command = new SqlCommand("MyStoredProc", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@ParentIDTable", SqlDbType.Structured).Value = ParentIDs;
command.Parameters["@ParentIDTable"].TypeName = "Int32List";
이 방법은 효과적으로 v SQL Server에 알림을 보내 테이블처럼 취급합니다. 저장 프로 시저에 값 배열을 전달하려는 모든 응용 프로그램에서 테이블 형식을 사용합니다. C# DataTable의 열 이름은 사용자가 만든 테이블 형식의 열 이름과 일치해야하며 TypeName 속성은 테이블 형식의 이름과 일치해야합니다.
이 방법을 사용하면 DB를 한 번만 호출하고 결과를 반복 할 때 선택 목록에 ParentID를 포함시켜 각 자식을 적절한 부모 개체와 비교할 수 있도록해야합니다 .
여기에 더 자세히 테이블 유형을 설명 할 수있는 좋은 자원이다 : http://www.sommarskog.se/arrays-in-sql-2008.html
합니까 GetChildrenByParentId()가 다른 저장된 프로 시저를 다른 연결을 생성하고 전화를? – Jason
예 별도의 연결을 만들고 별도의 저장 프로 시저를 호출합니다. – azamsharp
사용중인 SQL Server의 버전은 무엇입니까? – Jason