임의의 설정 값이 VARCHAR(255)
값으로 저장되는 테이블을 처리하고 있습니다. 내가 처리해야하는 특별한 하나는 증가되어야하고 호출자에게 리턴 될 필요가있는 시퀀스 번호입니다. (다시 말하지만, "number"라는 시퀀스는 VARCHAR
으로 저장되어 있습니다.SQL - char 값을 "증가"하면 데이터 정렬 오류가 발생합니다.
시퀀스 번호이기 때문에 별도의 단계로 선택하고 업데이트하고 싶지 않습니다. 나는 실제 숫자 필드와 과거에 이런 종류의 처리했으면, 내 방법은 값을 증가시키고 나에게 하나의 팽창의 foop에서 업데이트 된 값을 제공
UPDATE TABLE SET @SEQ_NUM = VALUE = VALUE + 1
같은 것을하고있다. 나는이 상황에서, 내가 캐스트와 같은 기본적인 것을 시도 할 거라고 생각 :
DECLARE @SEQ_NUM VARCHAR(255)
UPDATE SOME_TABLE
SET @SEQ_NUM = VALUE = CAST((CAST(VALUE AS INT) + 1) AS VARCHAR)
WHERE NAME = 'SOME_NAME'
실제 업데이트가 너무 오래 내가 변수에 결과를 할당하려고하지 않는 한 잘 작동을; 최대한 빨리처럼, 나는 다음과 같은 오류가 나타납니다
Msg 549, Level 16, State 1, Line 4 The collation 'SQL_Latin1_General_CP1_CI_AS' of receiving variable is not equal to the collation 'Latin1_General_BIN' of column 'VALUE'.
나는 그게 무슨 뜻인지 이해를하지만, 나는 그것이 일어나는 이유를 이해, 또는 어떻게 문제를 해결하는 방법 확장으로하지 않습니다.
특정 오류를 수정하는 대신, 문자 시퀀스 "숫자"를 증가시키는 대체 방법에 대한 제안을 환영합니다.
왜 자신의 시퀀스 번호를 유지하려고하십니까? 동시성과 같은 문제가 있습니다. 이것을 고안 한 사람이 생각하지 않았기 때문에 여기에서 느슨한 전투에 맞설 것입니다. –
아마도 'COLLATE' 키워드를 사용하여 문제를 해결할 수 있습니다. –
@SeanLange, 나를 믿어 라. 알아. 다행스럽게도이 특별한 사용 사례는 자주 행사되지 않지만 대규모 PITA입니다. – Ickster