2014-01-31 2 views
0

ASP 페이지에 대한 동적 필드 세부 정보가있는 프로젝트가 있습니다. 페이지가 실행되면 동적 필드 목록에 대해 데이터베이스를 쿼리 한 다음 모든 컨트롤이 런타임에 asp 페이지에 만들어집니다. 이제 모든 동적 필드는 다른 테이블 (또는 둘 이상의 테이블)에 해당 데이터를 갖습니다. 동적 제어 세부 테이블T-SQL에서 다중 선택 및 한 셀을 다른 행으로 조 변경

데이터는 이런 식이다

:

PersonID | FirstName | LastName | Designation 
----------------------------------------- 
1  | Person1  | SomeName | Manager 
2  | Person2  | MoreName | Executive 

표 2 다음과 같이

FieldID | FieldName   | MappingTableName | MappingColumnName 
------------------------------------------------------------------------- 
92  | txtPrsnFirstName | Table1   | FirstName 
93  | txtPrsnLastName | Table1   | LastName 
94  | ddlPrsnGender  | Table2   | Gender 
95  | txtCompany  | Table2   | Company 
96  | txtDesignation | Table1   | Designation 

대응하는 데이터 테이블의 데이터가있다 :

PersonID | Gender  | Company  
-------------------------------------- 
1  | Male  | ABC Cons 
2  | Female  | XYZ PVT.LTD 

현재, 내가 한 것은 저장 프로 시저를 만들어 세 개의 테이블 데이터를 동시에 반환하고 각각을 DataSet에 반입 한 다음 FieldTable 데이터를 먼저 반복 한 다음 반입합니다. Table1Table2

에서 해당 데이터는 내가 좋아하는 뭔가를 (한 번에 하나 개의 레코드를 가져옵니다) Table1Table2의 데이터가 여러 행의 형태로 전치 얻을 것이다하는 방식으로 데이터를 가져 오는 쿼리를 작성해야 이.

FieldID | FieldName   | MappingTableName | MappingColumnName | Data 
--------------------------------------------------------------------------------------- 
92  | txtPrsnFirstName | Table1   | FirstName   | Person1 
93  | txtPrsnLastName | Table1   | LastName    | SomeName 
94  | ddlPrsnGender  | Table2   | Gender    | Male 
95  | txtCompany  | Table2   | Company    | ABC Cons 
96  | txtDesignation | Table1   | Designation   | Manager 
+0

해당 테이블에서 어떤 값이 어떤 fieldname에 속하는지 어떻게 알 수 있습니까? FirstName의 데이터가 Person2가 아닌 Person1이라는 것을 어떻게 알았습니까? – DhruvJoshi

+0

참조하십시오. 하나의 선택 만있을 것입니다 (Join 논리를 사용할 수 있음). 한 번에 Table1 및 Table2의 레코드 하나만 가져옵니다. 이전 질문 (너의 것)은 질문 (내) 자체에 대한 대답을 가지고있다. 필드 테이블에는 데이터 테이블에서 해당 데이터를 선택하는 데 사용할 수있는'MappingTableName'과'MappingColumnName'이 있습니다. – Cyberpks

+0

하지만 그 매핑 테이블과 매핑 열의 레코드를 어떻게 알 수 있습니까? – DhruvJoshi

답변

0

나는 숨겨진 열을 추가 할 fieldID가와 PersonID 사이의 매핑을 나타내는 필드 - 테이블에서 (내가 그것을 호출 PersonMap) (의미를 : ID XY와 필드는 사람 Z의 데이터를 보여줍니다).

create function returnPersonData(in tablename varchar, in columnname varchar, in personID varchar) RETURNS VARCHAR 
BEGIN 
declare res varchar; 
set res = EXEC('SELECT %columnname% FROM %tablename% WHERE PersonID = %personID%'); 
return res; 
END 

는 이제 Data_column의 생성 기능을 사용 : - (그러므로 의사-SQL 내 TSQL 조금 녹슨)처럼 이제 함수를 만듭니다. FROM 문은 FieldTable + PersonMap- 열입니다.

SELECT FieldID, FieldName, MappingTableName, MappingColumnName, (returnPersonData(MappingTableName, MappingColumnName, PersonMap) AS Data) 
FROM (SELECT FieldID, FieldName, MappingTableName, MappingColumnName, (SELECT PersonID from somewhere) AS PersonMap FROM FieldTable ...) 

나는 당신에게 질문을 ... 인사 드리기를 바랍니다.