나는 기타 가게와 함께 갈 웹 사이트가 있습니다.다른 테이블에서 하나의 테이블을 업데이트하고 일치하지 않는 행을 가져 오기
많은 다른 지속적인 문제 중에는 공급 업체의 가격 변경이 있습니다. 따라서 각 가격표를 데이터베이스의 미리 만들어진 테이블에 업로드 한 다음 SKU별로 행을 업데이트하여 공급 업체 가격 목록에 제품을 동기화하려고합니다.
<System.Web.Services.WebMethod()> _
Public Shared Function syncPrices(supplierId, tableName)
Try
Common.changeData("UPDATE " & tableName & " p, products pp SET pp.rrp= p.rrp, pp.cost= p.trade, pp.upc= CASE WHEN p.upc <> '' THEN p.upc ELSE pp.upc END WHERE pp.sku= p.sku AND pp.supplier ='" & supplierId & "'")
Return "success|Prices Synced"
Catch ex As Exception
Return "error|" & ex.ToString
End Try
End Function
:이처럼 보이는 웹 메소드가
**Products:**
id | sku | description | cost .... more fields
**PriceList_gibson**
id | sku | description | trade .... more fields
:
따라서는, 깁슨 기타를 가지고, 나는 테이블 products
과 (간체)과 같이 테이블 PriceList_gibson
이
중요한 SQL 문은 다음과 같습니다.
UPDATE " & tableName & " p, products pp
SET
pp.rrp= p.rrp,
pp.cost= p.trade,
pp.upc= CASE WHEN p.upc <> '' THEN p.upc ELSE pp.upc END
WHERE pp.sku= p.sku AND pp.supplier ='" & supplierId & "'
분명히 tableName
과 supplierId
은이 함수를 호출 할 때 전달되는 변수이며, 어떤 공급 업체의 가격을 결정하고 그에 따라 데이터베이스의 어떤 제품을보고 있는지 결정합니다.
이것은 잘 작동합니다. 제품 테이블의 sku
필드와 공급 업체 가격 목록의 sku
필드가 일치하며 그에 따라 가격 관련 필드가 업데이트됩니다. 또한 사용 가능한 경우 UPC도 업데이트됩니다.
이 처리되지 이가지 경우입니다 : 제품이 중단
- 경우 항목이 가격표에서 제거 될 때, 더
sku
일치하는 항목이 발견되지 않습니다이 있지만sku
경우products
테이블에 - 을 남아있을 수 있습니다
products
테이블에 잘못 입력 된 경우 일치하지 않습니다.
그래서, 내가 뭘 원하는 products
일치 업데이트되고있는 공급 업체의 가격 목록의에서 supplierId
필드의 항목의 목록을 얻을 수 있지만, 가격 목록에 표시되지 않습니다이다.
물론 레코드를 반복하여이 작업을 수행 할 수 있지만 SQL 문을 사용하여 수행하는 방법은 무엇입니까?
: 같은 데이터 구조를 갖는 여러 테이블에 대한 SQL 안티 패턴입니다. 'PriceList_gibson'과'PriceList_whatever' 대신에'PriceList' 만 가지고 추가 필드를 추가하면됩니다. 그렇다면 동적으로 SQL을 구성 할 필요가 없습니다. ''깁슨 ''은 매개 변수 일뿐입니다. 이것은 또한 실행 계획을 가져올 수 있음을 의미합니다. 그리고 더 신뢰할 수있는 테스트 등 등, – MatBailie
예, 나는 미래에 그것을 바꿀 수도 있습니다, 그것은 장기간에 더 의미가있을 것입니다, 현재 그것은 테이블에 데이터의 업로드를 복잡하게 만들 것입니다. 나는 당신의 요점을 잡는다!:-) –