SQL Server 2008을 사용하면 세 개의 테이블, 테이블 a, 테이블 b 및 테이블 c가 있습니다. ,TSQL : 다음에 사용 가능한 ID가 있습니다
모두는 ID
열이 있지만 ID
열 특정 논리 다음하는 varchar
형
현재 저장된 프로 시저 이름 PARAM을는 C 표 A에 대해 상기 ID
열 B를 표 들면, identity integer
이고 테이블 a 또는 테이블 b에 삽입하고 ID를 얻고 접두사 'A'또는 'B'를 입력 한 다음 테이블 c에 삽입하십시오.
문제는 표 C ID
열이 중복 값을 가질 가능성이 있습니다. 즉, 표 A의 ID가 2 인 경우 표 C의 ID
열에 'A2', 'A3', 'A5' 테이블 C의 다음 사용 가능한 값을 식별하기 위해 T-SQL 쿼리를 작성한 다음 이에 따라 테이블 A/B를 업데이트해야합니까?
[업데이트]이, 1. 입력 파라미터의 현재 단계 의존한다 는 표 C에 삽입하는 테이블 A와 테이블 B 2 초기화 시드 값 = @@ IDENTITY 3. 계산 ID 값을 삽입 접두사 'A'또는 시드 값이 'B'인 경우 4. 3 단계의 ID 값으로 테이블 C에서 레코드 일치를 찾습니다. 레코드를 찾지 못하면 삽입하고 시드 값을 1 씩 늘린 다음 반복하십시오 3 단계
특정 값 범위에있는 문제는 테이블 C ID에 값의 거대한 블록이있을 수 있습니다. 즉, A3000에서 A500000까지의 테이블 C ID에 존재합니다. 기존 쿼리를 따르는 경우 데이터베이스 쿼리가 너무 느립니다. 논리. 접두어없이 최소 숫자를 현명하게 얻으려면 논리를 알아야합니다.
설명하기가 어렵습니다. 더 의미가 깊어지기를 바랍니다. 사전에 감사드립니다.
당신은 이것을 재 설계하는 것이 훨씬 낫습니다. – RBarryYoung
테이블 A와 B의 'ID'가 실제로 'INT IDENTITY'인 경우 - 어떻게 중복을 줄 수 있습니까? 테이블 C에서 테이블 A 또는 B의 ID 열의 ** 고유 ** 값을 더한 테이블 접두사 (A 또는 B)를 사용하는 경우 불가능할 것 같습니다. –
@ Tommy Wang, 게시물을 수정하고 더 자세한 예제를 제공 할 수 있습니까? – PowerUser