문자열 열이있는 테이블이 있습니다. 이 열은 현재 행의 일부 텍스트 + ID로 구성되어야합니다. 데이터베이스에서 생성 한 ID입니다.복잡한 열 (Id + 문자열)
예를 들어 행 (ID) (12), (MyColumn) 'abcde12'
을 할 수있는 가장 좋은 방법은 무엇입니까? NHibernate로 할 수 있을까요, 아니면 SQL로만 할 수 있나요?
문자열 열이있는 테이블이 있습니다. 이 열은 현재 행의 일부 텍스트 + ID로 구성되어야합니다. 데이터베이스에서 생성 한 ID입니다.복잡한 열 (Id + 문자열)
예를 들어 행 (ID) (12), (MyColumn) 'abcde12'
을 할 수있는 가장 좋은 방법은 무엇입니까? NHibernate로 할 수 있을까요, 아니면 SQL로만 할 수 있나요?
나는이 대신이 방법에 대해 직접하지만 귀하의 질문에 대답 않는다는 것을 알고
public virtual string MyCalculatedField {
get { return MyColumn + Id.ToString(); }
}
이렇게함으로써 당신은 DB가 귀하의 ID를 생성 한 후 이중 업데이 트를 부과 할 필요가 없습니다.
하지만이 데이터베이스를 사용하는 사람이이 필드를 다른 모델 또는 SQL 쿼리와 함께 읽으려면 어떻게해야합니까? – k0lpak
예,이 방법의 한계점입니다. –
"데이터베이스에서 생성 한 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가 지원하는 경우)를 사용하는 것이 좋습니다.
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
합니까 같은 다른 컬럼에서 오는 언급 "텍스트" 표? 그렇지 않다면 새 레코드를 삽입하기 전에 "일부 텍스트"가 무엇인지 알 것입니까? – gangreen
아니요 클라이언트에서 왔습니다. 클라이언트의 복잡한 규칙에 의해 생성 된 텍스트입니다. – k0lpak