2009-11-10 5 views
0

레거시 데이터베이스에서 작업하고 있습니다. 몇 가지 테이블에서 기본 키가 여러 열을 사용합니다.SQL Server 키가 여러 열을 포함하는 테이블에서 기본 키를 선택하십시오.

앱에서 각 행의 데이터를 테이블로 읽은 다음 사용자가 데이터를 업데이트하고 데이터를 쓰게됩니다. 다시 테이블에. 현재

나는 다양한 PK 컬럼을 연결하고 나는 테이블에 데이터를 다시 넣을 때의 고유 ID로 저장할 수 있습니다.에 더 효율적인 방법이 있는지

지금 궁금 해서요 mySQL 배경에서 나는 SQL Server 2005가 기능을 가질 수 있다고 생각하지는 않는다.

SELECT PRIMARYKEY() as pk, ... FROM table WHERE ... 

위의 코드는 데이터베이스 엔진이 주어진 레코드의 기본 키로 사용하는 키를 선택합니다.

나는 검색 한 결과 아무것도 찾을 수 없습니다. 아마 그저 까다 롭지 만 연결 트릭을 좋아하지 않습니다.

DC

답변

1

SQL Server에는 실제로 알고있는 PRIMARYKEY()와 동일한 기능이 없습니다. 시스템 + 탈 로그 뷰를 참조하여 기본 키를 구성하는 열을 찾을 수 있지만 단순히 함수 호출로 기본 키 값을 선택할 수는 없습니다.

StarShip3000에 동의합니다. PK 값을 어떻게 연결합니까? 필자는 필자가 여러 개의 열로 구성된 복합 기본 키가 반드시 좋은 아이디어라고 생각하지 않지만 레거시 시스템이고 변경할 수 없다면 PK 값을 연결에 연결하지 않고 데이터를 다시 작성할 때 다시 분리하십시오. 구조체를 그대로 두십시오. 복합 키는 일반적으로 권장되지 않지만 실제로 지원됩니다. 문제가 없습니다.

+0

나는 더 쉽게 읽을 수 있도록 (즉, SQL 문에서 : bl1에서 uid로 col1 + col2를 선택) 결과 문자열을 웹 양식의 고유 한 ID로 저장하기 때문에 읽은 키를 연결합니다. 테이블을 업데이트 할 때 where 문에서 컬럼의 연결에 대한 고유 ID를 비교합니다. 즉, update blah where col1 + col2 = uid. 그런 식으로 연결은 모두 SQL에서 완료되며 누군가가 순서를 변경하고 나중에 중단 할 가능성이 적습니다. 적어도 그 이론. 그 추악한 이유는 기본 키에 int 5 개와 varchar 1 개가 있기 때문입니다. – DeveloperChris

1

"현재 나는 다양한 PK 컬럼을 연결하고 나는 테이블에 데이터를 다시 넣을 때의 고유 ID로 저장할 수 있습니다." pk를 대상 테이블에 두 개의 열로 저장하고 원본 테이블의 두 열에 다시 조인 할 수는 없습니까?

당신에게주는 혜택은 무엇입니까?

+0

그는 자신의 프로그래밍 언어에서 일종의 데이터 구조의 핵심으로 이것을 사용합니다. 데이터베이스에 없습니다. – idstam

+0

필자가 제공 한 레거시 데이터베이스는 원래 디자이너가 기본 키로 여러 열을 사용하기로 결정했습니다. 두 번째 테이블은 없습니다. 단순히 데이터를 사용자에게 제시하고 변경 사항을 되돌려 놓습니다. 불행하게도 저는 테이블의 디자인을 자유롭게 변경할 수 없습니다. – DeveloperChris

관련 문제