실제 개발 과정에서 우리는 종종 쿼리나 통계적인 하위 테이블 정보에 직면하게 됩니다. 한 수준의 처리에 대해 두 가지 수준, 세 가지 수준 등이 있는 경우 이때 작성된 조건은 비교적 간단합니다. 상황이 더 복잡해지고 오류가 발생하기 쉽습니다. 유연한 비교 연산 기능을 제공하는 것 외에도 SQL Artisan 필드 개체는 개체의 In 메서드에 N 수준 조건 중첩 기능을 제공하므로 쿼리 조건을 보다 유연하게 구성할 수 있습니다.
MSSQL의 NorthWind를 예로 들어
특정 기간 동안 특정 직원의 매출액을 쿼리합니다.
처리된 테이블: 직원, 주문, 주문 내역
구현 과정에서 테이블 연결을 통해 쿼리하거나 대상 테이블을 직접 쿼리하려면 현재 쿼리 조건에 상위 테이블의 조건을 추가해야 합니다. 중첩된 방식.
Employee.Employee->Orders.OrderDate->Sum(Order Details)은 반대 조건 중첩을 만듭니다.
다음은 SQL 문과 SQL Artisa 구성 요소에서 두 가지 쿼리 메서드를 구현한 것입니다.
(코드는 SQL Artisan 컴포넌트의 기능을 표현하기 위해서만 사용되며, SQL 문 자체에 존재하는 다른 문제는 다루지 않습니다.)
SQL 방법 1:
SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM Employees INNER JOIN 주문 ON Employees.EmployeeID= Orders.EmployeeID INNER JOIN [주문 세부 정보] ON Orders.OrderID=[주문 세부 정보].OrderID 여기서 ( ( Employees.EmployeeID = 3 And Orders.OrderDate >= '1997-7-1' ) And Orders.OrderDate <= '1997 -8-1')
SQL Artisan 방법 1:
query = session.CreateQuery(Employees.TBL.INNER(Orders.TBL,Orders._EmployeeID)&
Orders.TBL.INNER(OrderDetails.TBL,Orders._OrderID))
query.Selects= new FieldAdapter[] {SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))};
query.Expreesion = Employees._EmployeeID.At(Employees.TBL) ==3 &
Orders._OrderDate.At(Orders.TBL ) >= DateTime.Parse("1997-7-1")&
Orders._OrderDate.At(Orders.TBL) <= DateTime.Parse("1997-8-1")
ds = query.ExecuteDataSet()
; 방법 2:
SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM [Order Details] where OrderID in (select OrderID from Orders where ( ( ( OrderDate >= '1997-7-1'And OrderDate < '1997-8) -1' ) 및 EmployeeID in (직원에서 EmployeeID 선택, 여기서 ( EmployeeID = 3 )) ) ))
SQL Artisan 방법 2:
IQuery 쿼리 = session.CreateQuery(OrderDetails.TBL);
query.Selects= new FieldAdapter[]{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))}
; Expreesion = OrderDetails._OrderID.In(Orders.TBL,Orders._OrderID,
Orders._OrderDate >= DateTime.Parse("1997-7-1") &
Orders._OrderDate < DateTime.Parse("1997-8-1") &
Orders._EmployeeID.In(Employees.TBL,Employees._EmployeeID,Employees._EmployeeID ==3))
System.Data.DataSet ds = query.ExecuteDataSet();
위의 코드를 보면, SQL Artisan 컴포넌트가 필드 객체의 In 메소드를 통해 편리하고 유연하게 다중 레벨 조건을 중첩시키는 것을 알 수 있습니다. 개발자가 이렇게 번거로운 SQL 문을 작성할 때 문자열을 사용하여 SQL 문을 작성하는 것은 나쁜 생각이 아닙니다. 쿼리 조건이 더 복잡하기는 하지만 적법성을 수동으로 확인하는 것도 매우 골치 아픈 일입니다.
SQL Artisan이 제공하는 것은 완전히 개체 기반의 조건 작성 방식이며 개발 환경의 컴파일 및 테스트를 제공하여 조건 작성의 효율성과 품질을 크게 향상시킵니다.
두 SQL 메소드의 SQL 문은 SQL Artisan 메소드를 실행하여 차단됩니다.