2012-02-22 3 views
2

문자열 열이있는 테이블이 있습니다. 이 열은 현재 행의 일부 텍스트 + ID로 구성되어야합니다. 데이터베이스에서 생성 한 ID입니다.복잡한 열 (Id + 문자열)

예를 들어 행 (ID) (12), (MyColumn) 'abcde12'

을 할 수있는 가장 좋은 방법은 무엇입니까? NHibernate로 할 수 있을까요, 아니면 SQL로만 할 수 있나요?

+0

합니까 같은 다른 컬럼에서 오는 언급 "텍스트" 표? 그렇지 않다면 새 레코드를 삽입하기 전에 "일부 텍스트"가 무엇인지 알 것입니까? – gangreen

+0

아니요 클라이언트에서 왔습니다. 클라이언트의 복잡한 규칙에 의해 생성 된 텍스트입니다. – k0lpak

답변

0

나는이 대신이 방법에 대해 직접하지만 귀하의 질문에 대답 않는다는 것을 알고

public virtual string MyCalculatedField { 
    get { return MyColumn + Id.ToString(); } 
} 

이렇게함으로써 당신은 DB가 귀하의 ID를 생성 한 후 이중 업데이 트를 부과 할 필요가 없습니다.

+0

하지만이 데이터베이스를 사용하는 사람이이 필드를 다른 모델 또는 SQL 쿼리와 함께 읽으려면 어떻게해야합니까? – k0lpak

+0

예,이 방법의 한계점입니다. –

0

"데이터베이스에서 생성 한 ID"의 의미에 따라 새 레코드 삽입을 두 단계로 분할해야 할 수 있습니다. 당신의 ID가의 MySQL의 자동 증가 같은 의해 생성 된 경우

, 그 결과는 다음과 같습니다

Insert into your_table (some_text_col) 
Values ('some_text') 

이 당신에게

ID some_text_col combined 
1 'some_text'  Null 

을 얻을 것이다 당신은 이상에 해당 열을 업데이트 할 수 있습니다

Update your_table 
set combined = concat(some_text_col, id) 
where id = LAST_INSERT_ID() 

참고 : 이것은 테스트하지 않았지만 MySQL에서는 작동합니다. 다른 DBMS에도 쉽게 적용 할 수 있습니다. Update을 자동화하기 위해 트리거 (DB가 지원하는 경우)를 사용하는 것이 좋습니다.

+0

@@ IDENTITY는 SQL Server에서만 작동합니다. MySQL은 LAST_INSERT_ID()를 사용합니다. – gangreen

+0

@gangreen 네 말이 맞아. 고마워. 고마워. – TPete

0

12을 두 위치에 저장해야하는 이유는 무엇입니까?

열에 12을 저장하고 에 abcde을 저장하십시오.

검색 할 때 두 값을 연결하거나 응용 프로그램에서 필요로하는 별도의 열로 검색 할 수 있습니다.

다음
CREATE VIEW Extra AS 
(SELECT ID 
     , MyColumn 
     , CONCAT(ID, MyColumn) AS ExtraColumn 
    FROM TableX 
) ; 

당신이 사용할 수 있습니다 :

SELECT ExtraColumn FROM Extra 

나 : 또는 당신은이 View 사용할 수 있습니다

SELECT * FROM Extra