나는이에 대한 내 머리를 때리고 있었고, 난 그냥 뭔가를 분명 실종,하지만 해요 확신 ... 나는 고객의 데이터베이스에 테이블이, 즉 기본적으로 UNPIVOTted SQL 테이블
의 된 데이터 업데이트 :
Item_Set_Key int
Item_1 bit
Notes_1 nvarchar(80)
Item_2 bit
Notes_2 nvarchar(80)
Item_3 bit
Notes_3 nvarchar(80)
...
각 레코드에는 99 개의 항목이 있으며 스키마 변경은 옵션이 아닙니다 (다른 외부 고려 사항 포함).
그러나, 아무것도 원격으로 사용자에게 정보를 닮은에 표시하기 위해, 우리는 다음과 같이 (뷰를 통해)를 피벗 해제 할 수 있습니다
SELECT i.Item_Set_Key, i.Item_Number, i.Selected, i.Item, i2.Notes, i2.Note
FROM (
SELECT Item_Set_Key, SUBSTRING (Item, 6, 2) AS Item_Number, Selected, Item
FROM Item_Set
UNPIVOT (Selected FOR Item IN
(Item_1, Item_2, Item_3, Item_4, Item_5, ...)
) as u
) AS i
LEFT JOIN (
SELECT Item_Set_Key, SUBSTRING (Note, 7, 2) AS Item_Number, Notes
FROM Item_Set
UNPIVOT (Notes FOR Note IN
(Notes_1, Notes_2, Notes_3, Notes_4, Notes_5, ...)
) as n
) AS i2 ON i2.Item_Set_Key = i.Item_Set_Key
AND i2.Item_Number = i.Item_Number
내가 그리드에 그 표준 바인딩을 . 그러나 텍스트를 SET에서 명시 적으로 이름을 지정해야하지만 항목 및 메모 열의 열 이름이 동적이기 때문에 UpdateCommand를 작성하는 방법에 대한 손실이 있습니다. 각 레코드에는 하나의 항목/노트 쌍에 대한 데이터 만 있기 때문에 모든 열을 설정하면 안됩니다.
아이디어가 있으십니까?
그래, 내가 피하려고했던 것입니다. 나는 (효과적으로) SQL IF 문 (그리고 거대한, 몇 백 열로 다루는 거대한)의 거대한 집합 아니 었 INSERT/UPDATE/DELETE 명령을 쓸 수있는 방법이 있었으면 좋겠다. 스키마 문제는 레거시 시스템이 거대한 컬럼 형식으로 데이터를 적극적으로 업데이트한다는 사실에서 기인합니다. 그렇기 때문에 거대한 테이블 병합은 추악합니다. 이걸로가는 방법은 설정된 기능을 감싸고 변환하는 sprocs 집합이므로 INSERT/UPDATE/DELETE 문에서 호출을 사용할 수 있습니다. – Thought