2010-07-09 2 views
0

그래서이 SQL 테이블을 업데이트해야합니다. 이제 우리는 도구를 사용하여 프로세스를 수행합니다. 따라서 열의 이름을 변경 한 후에는 도구가 이전 열을 삭제하고 새로운 열을 새 이름으로 추가하기 때문에 수동으로 처리해야합니다. 이 코드를 빌드에 포함하고 빌드에서 테이블을 제외하십시오.CASE 문이 포함 된 SQL UPDATE에 대한 질문

우리가 현재 가지고있는 테이블에는 'FeeTypeId'라는 열이 있습니다. 우리는 유형과 설명과 관련된 ID 묶음이있는 다른 테이블 인 조회 테이블을 가지고 있습니다. 앞서 언급 한 다른 테이블의 이전 'FeeTypeId'필드에 특정 'FeeDescription'과 관련된 LookupId가 포함되기를 원합니다. 매핑이 포함 된 Excel 시트가 있으므로 지금 당장은 실제 데이터가없고 논리 만 있습니다.

내가 작성한 스크립트는 다음과 같습니다. 그러나 실행 여부는 알 수 없습니다. 너희들이 나를 도와 줄 수 있니?

---------------------------------------------------------------------- 
--PRE_UPGRADE-- 
---------------------------------------------------------------------- 

CREATE TABLE dbo.TmpFeesToRules(OldValue varchar, NewValue varchar) 
--populate with values from Excel 

---------------------------------------------------------------------- 
--POST UPGRADE-- 
---------------------------------------------------------------------- 

UPDATE Lending.ApplicationFee 
    SET FeeTypeId = 
     CASE t.NewValue 
      WHEN <> null THEN (SELECT LookupID FROM tblLookup WHERE LookupType = 'FEE_CODE' AND LookupDesc = t.NewValue) 
      ELSE (SELECT LookupID FROM tblLookup WHERE LookupType = 'FEE_CODE' AND LookupCode = 'OTHER') END 
      -- else might change, might not even need an else 

    FROM TmpFeesToRules t INNER JOIN tblLookup l ON t.NewValue = l.LookupDesc 

    -- Drop the tmp table 
    DROP TABLE dbo.TmpFeesToRules 
+0

이 허용 저장 프로 시저에서이 작업을 수행하는 것입니다, 그래서 당신은 먼저 (이 경우 문을 사용하여)에 값을 할당 변수에, 그 다음을 사용을 만들 수 있습니다 최신 정보? 그러면 코드의 가독성이 크게 향상됩니다. – Rob

+0

나는 소원한다. 이것은 빌드하는 방식 때문에 수행 할 수있는 유일한 방법입니다. 그들은 실제 데이터베이스에 추가 된 것을 원하지 않습니다. 그렇지 않으면 아마 모든 새 데이터를 가진 다른 테이블을 만들 것입니다. 그런 다음 오래된 데이터를 삭제하는 빌드에는 아무런 문제가 없습니다. 그럼 나는 그것을 복사 할 것입니다. – Scott

답변

1

정말 테스트 할 수 없지만 다음은 유효한 Toad에 따르면 다음과 같습니다. 아마 당신은이 작업을 실행하려고 할 수 있습니다

UPDATE Lending.ApplicationFee 
SET FeeTypeId = 
(
    CASE WHEN t.NewValue IS NOT NULL THEN 
     (SELECT LookupID FROM tblLookup WHERE LookupType = 'FEE_CODE' AND LookupDesc = t.NewValue) 
    ELSE 
     (SELECT LookupID FROM tblLookup WHERE LookupType = 'FEE_CODE' AND LookupCode = 'OTHER') 
    END 
) 
FROM TmpFeesToRules t 
INNER JOIN tblLookup l ON t.NewValue = l.LookupDesc