문제

기본 테이블 "카드"에 속성을 저장하는 기본 "Property Bag"테이블이 있습니다. 그래서 고급 카드 검색을 시작하고 싶을 때 다음과 같은 일을 할 수 있습니다.

SELECT dbo.Card.Id, dbo.Card.Name
  FROM dbo.Card
         INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
 WHERE dbo.CardProperty.IdPrp = 3 AND dbo.CardProperty.Value = 'Fiend'
INTERSECT
  SELECT dbo.Card.Id, dbo.Card.Name
  FROM dbo.Card
         INNER JOIN dbo.CardProperty ON dbo.CardProperty.IdCrd = dbo.Card.Id
 WHERE (dbo.CardProperty.IdPrp = 10 AND (dbo.CardProperty.Value = 'Wind' OR dbo.CardProperty.Value = 'Fire'))

내가해야 할 일은이 아이디어를 어떤 종류의 저장된 절차로 추출하여 이상적으로 속성/값 조합 목록을 전달하고 검색 결과를 얻을 수 있도록하는 것입니다.

처음에 이것은 "엄격한"검색이 될 것이며 결과가 쿼리의 모든 요소와 일치해야한다는 것을 의미하지만 쿼리의 모든 결과와 일치하도록 "느슨한"쿼리를 갖고 싶습니다.

나는이 머리를 감싸지 않는 것 같다. 이전 버전 의이 버전은 많은 수의 SQL 쿼리를 생성하여 많은 수의 및/또는 조항으로 실행하는 것이었지만 이번에는 조금 더 우아한 일을하기를 바라고 있습니다. 이 작업을 어떻게하려고합니까?

도움이 되었습니까?

해결책

당신이있는 것 같습니다 EAV 여기 모델. SQL Server 2005 이상을 사용하는 경우 XML 데이터 타입을 사용하는 것이 좋습니다.

http://weblogs.sqlteam.com/mladenp/archive/2006/10/14/14032.aspx

내장 된 XML 쿼리 기능을 사용하면 검색 및 재료를 훨씬 쉽게 만듭니다.

모델을 변경할 수 없다면 다음을보십시오.

http://weblogs.sqlteam.com/davidm/articles/12117.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top