2013-05-17 4 views
3

을 직접 시도하고 있습니다. 일부 행을 적절한 클래스의 인스턴스에 매핑하십시오. 모든 테이블의 모든 열을 사용하고 한 테이블의 모든 열을 주어진 클래스에 매핑해야한다는 것을 알고 있습니다.모든 열 이름 앞에 특정 문자열을 붙이십시오?

그러나 더 쉬운 방법이 있는지 궁금합니다. 지금은 School 클래스와 User 클래스가 있습니다. 이 클래스는 각각 Name 속성과 다른 속성을 갖습니다 (그러나 'Name '은 두 클래스의 상호 이름이기 때문에 중요한 속성입니다).

지금 당장지도를 작성하기 위해 다음 작업을 수행하고 있습니다. Name이 클래스 간의 상호 이름이기 때문에

SELECT u.SomeOtherColumn, u.Name AS userName, s.SomeOtherColumn, s.Name AS schoolName FROM User AS u INNER JOIN School AS s ON something

, 나는 다음을 수행 싶지만, 그럴 수 없어. 둘 다 열 Name이 있기 때문에

SELECT u.*, s.* FROM User AS u INNER JOIN School AS s ON something

그러나 이것은 오류가 발생합니다. 어떻게 든 접두사를 붙일 수 있습니까? 예를 들면? 그래야

u.user_*, s.school_*

그 각 테이블의 모든 열은 접두사가? 예를 들어 user_Nameschool_Name?

+7

여기에 맞는 대답은 질문에있는 것입니다. "지금 당장 그들을 매핑하기 위해 다음 작업을 수행하고 있습니다. ... " –

+0

동적 SQL을 사용하여'information_schema.tables' 뷰 또는 유사한 것으로부터 열 이름을 검색하고'SELECT' 문을 빌드하고 실행할 수 있습니다. 나는 당신이 정말로 원한다면 당신이 할 수 있다고 말하면서 그것을 추천하지 않을 것입니다. –

+3

내가 제안하는 것은 Entity Framework와 같은 작업을 수행하는 ORM을 찾는 것입니다.나는 당신이 수동으로하고 싶다고 말했지만, 그 필요성을 포기할 수 있다면, ORM은 확실히 인생을 훨씬 쉽게 만듭니다. –

답변

1

전 몇 달 전에 동적 SQL을 사용하는 SQL Server 및 응용 프로그램의 자동 코드 생성 루틴 개발을 돕기 위해 많은 기능과 절차를 작성했습니다.

Create FUNCTION [dbo].[ColumnString2] 
(
    @TableName As SYSNAME,  --table or view whose column names you want 
    @Template As NVarchar(MAX), --replaces '{c}' with the name for every column, 
    @Between As NVarchar(MAX) --puts this string between every column string 
) 
    RETURNS NVarchar(MAX) AS 
BEGIN 
    DECLARE @str As NVarchar(MAX); 

    SELECT TOP 999 
     @str = COALESCE(
       @str + @Between + REPLACE(@Template,N'{c}',COLUMN_NAME), 
       REPLACE(@Template,N'{c}',COLUMN_NAME) 
         ) 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_SCHEMA= COALESCE(PARSENAME(@TableName, 2), N'dbo') 
     And TABLE_NAME = PARSENAME(@TableName, 1) 
    ORDER BY ORDINAL_POSITION 

    RETURN @str; 
END 

이것은 당신이 테이블의 열 이름을 모두 포맷하거나 당신이 원하는 방식으로 볼 수 있습니다 : 여기 당신의 상황에 가장 도움이 될 것이라고 생각 하나입니다. 단순히 테이블 이름과 템플릿 열을 '{c}'으로 전달하면 각 열에 대해 열 이름을 삽입 할 수 있습니다. @TableName의 모든 열에 대해이 작업을 수행하고 그 사이에 @Between 문자열을 추가하십시오. 이 기능 하였다

SELECT dbo.[ColumnString2](N'yourTable', N' 
    {c} As prefix_{c}', N',') 

: 여기

수직으로 SELECT 쿼리에 포함하기에 적합한 방식으로 접두어로 개명 테이블의 열 이름 모두를 포맷하는 방법의 예는 동적 SQL과 함께 사용하기위한 것이지만, 출력을 Grid (그리드 대신)로 설정하여 Management Studio에서 실행하여 사용할 수도 있습니다. 그런 다음 출력을 잘라내어 원하는 쿼리,보기 또는 코드 텍스트에 붙여 넣습니다. (텍스트 결과에 대한 SSMS 쿼리 옵션을 변경하여 " 최대 문자 수"을 256에서 최대 (8000)로 늘리십시오. 그래도 문제가 해결되지 않으면이 절차를 a로 변경하십시오. 함수는 하나의 큰 문자열이 아닌 별도의 행으로 각 열을 출력합니다.)

관련 문제