고유 식별자 키 및 고유 명칭 당 레코드를 저장하는 명칭 테이블이 있으므로 모든 고유 식별자 키에는 최대 13 개의 행이 포함될 수 있습니다. 해당 행에 7 가지 다른 트랜잭션 유형이 있습니다. 난 쉽게 복사 및 붙여 넣을 수 있습니다 아래 (내게 좋은) 7 번, 각각 다른 SET 및 WHERE 절 조합을 사용하여 내 쿼리를 붙여 넣을 수 있지만 지저분 해 보이는 매우 긴. 쿼리는IF 문을 사용하여 필드 업데이트가 동적으로 변경되는 경우
:
UPDATE #RecycleCashDenomsClone
SET startBal =
CASE
WHEN B.DenomType = '1.00' THEN A.d_01
WHEN B.DenomType = '2.00' THEN A.d_02
WHEN B.DenomType = '5.00' THEN A.d_05
WHEN B.DenomType = '10.00' THEN A.d_10
WHEN B.DenomType = '20.00' THEN A.d_20
WHEN B.DenomType = '50.00' THEN A.d_50
WHEN B.DenomType = '100.00' THEN A.d_100
WHEN B.DenomType = 'C0.01' THEN A.c_01
WHEN B.DenomType = 'C0.05' THEN A.c_05
WHEN B.DenomType = 'C0.10' THEN A.c_10
WHEN B.DenomType = 'C0.25' THEN A.c_25
WHEN B.DenomType = 'C0.50' THEN A.c_50
WHEN B.DenomType = 'C1.00' THEN A.c_100
END
FROM #VaultTotals A INNER JOIN #RecycleCashDenomsClone B ON A.importKey = B.importKey
WHERE A.identifier = 'D0510'
내가 할 싶어요 무엇 ... 7 개 가지 다른 조합 @updatedField 및 @whereField이 (VARCHAR에 대한) 변경하고 다음과 같이 쿼리로 전달 if 문을 설정 :
UPDATE #RecycleCashDenomsClone
SET @updatedField =
CASE
WHEN B.DenomType = '1.00' THEN A.d_01
WHEN B.DenomType = '2.00' THEN A.d_02
WHEN B.DenomType = '5.00' THEN A.d_05
WHEN B.DenomType = '10.00' THEN A.d_10
WHEN B.DenomType = '20.00' THEN A.d_20
WHEN B.DenomType = '50.00' THEN A.d_50
WHEN B.DenomType = '100.00' THEN A.d_100
WHEN B.DenomType = 'C0.01' THEN A.c_01
WHEN B.DenomType = 'C0.05' THEN A.c_05
WHEN B.DenomType = 'C0.10' THEN A.c_10
WHEN B.DenomType = 'C0.25' THEN A.c_25
WHEN B.DenomType = 'C0.50' THEN A.c_50
WHEN B.DenomType = 'C1.00' THEN A.c_100
END
FROM #VaultTotals A INNER JOIN #RecycleCashDenomsClone B ON A.importKey = B.importKey
WHERE A.identifier = @whereField
불행히도 이것은 작동하지 않으며 오류 메시지가 나타나지 않고 필드를 업데이트하지 않습니다. 가능하다면 Dynamic SQL을 피하고 싶습니다. 위에서 언급 한 것처럼 다른 필드와 where 절로이 쿼리를 7 번 붙여 넣는 것을 피하고 싶습니다.
P. 두 변수를 varchar (10)로 만들고 문자열로 설정하여 테스트했습니다. 예/
DECLARE @updatedField VARCHAR(10) = 'startBal'
DECLARE @whereField VARCHAR(10) = 'D0510'
여기서부터 시작하는 것이 좋습니다. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –
여기 동적 SQL을 피할 수있는 방법을 모르겠다. – scsimon
'UPDATE'는'SELECT'처럼 변수의 값을 설정할 수 있습니다. 그것이 당신의 코드가하는 것입니다. "이 메시지는 작동하지 않으며 오류 메시지가 없습니다"라는 경우는 아니지만 예상하거나 확인하지 못한 결과는 아닙니다. _optimistic 프로그래밍 _의 경우이기도합니다. 원하는대로 할 수 있기를 바랍니다. 'set ColB = @ColName @Operator @ Constant' 여기서 첫 번째 두 변수 값은 소스 코드로 재 해석되어야하지만 세 번째 변수는 재 해석되지 않아야합니다. – HABO