SQL 문에서 값 선택 및 설정

c# dapper sql sql-server

문제

나는 다소 기발한 질문이있다. SELECT 문에서 기본값을 설정할 수 있습니까?

다음 쿼리에서 boolItem 을 항상 거짓 (데이터베이스에서 검색하지 않음)으로 설정합니다. 왜 내가 설명하는지 알기가 어렵지만 나와 곰을.

SELECT id, boolItem = False
FROM MyTable;

나는 기존의 대규모 SQL 데이터베이스와 프로젝트로 일하고있다. 나는 데이터를 쿼리하고 그들을 반환하고 Action C #을 객체. 동작은 사용자 또는 표준 동작에 의해 사용자 정의 될 수 있습니다. 이것은 IsCustom 속성에 의해 표시됩니다.

public class Action
{
    public int Id { get; set; }
    public bool IsCustom { get; set; }
    .....
}

SQL 데이터베이스에서 사용자 지정 작업은 테이블에 저장됩니다 custom_actions 및 표준 작업은 테이블에있는 actions .

아래 코드를 사용하여 Action 객체를 검색하고 저장합니다. actions 테이블의 쿼리를 항상 IsCustom 속성을 false로 설정하려고합니다. custom_actions 테이블의 쿼리는 항상 IsCustom 속성을 true로 설정합니다. 나는 테이블을 is_custom 열이 없기 때문에 유효 코드가 아닌 SELECT a.id AS Id, a.is_custom = false AS IsCustom 쿼리를 사용하고 있지만 무엇을하고 있는지 보여줍니다.

public async Task<IEnumerable<Models.Action>> ExecuteAsync (IDbConnection conn, IDbTransaction transition, long userId)
{
    string sql = @"SELECT a.id AS Id, a.is_custom = false AS IsCustom
                   FROM actions a
                   INNER JOIN members_actions ma ON  a.id = ma.action_id AND is_custom = false
                   WHERE ma.member_id = :userId
                   UNION
                   SELECT a.id AS Id, a.is_custom = true AS IsCustom 
                   FROM custom_actions a
                   INNER JOIN members_actions ma ON  a.id = ma.action_id AND is_custom = true
                   WHERE ma.member_id = :userId;";

    return await conn.QueryAsync<Models.Action> (sql, new {userId = userId}, transition);
}

표 '작업'열 = id || description || name
테이블 'Custom_actions'열 = id || description || name || parameters

이것이 가능한가? 구조적으로 데이터베이스를 변경하는 것 (2 개의 테이블을 1로 병합하고 is_custom 열을 추가하는 것)보다 낫습니다.

수락 된 답변

true 또는 false 값을 선택하고 별칭을 사용하여 열 이름 IsCustom 을 지정할 수 있습니다.

예를 들어 아래 예제를 수정하여이를 수행하는 방법을 보여주었습니다 (두 테이블 중 하나에 is_custom 열이 없기 때문에 JOIN 조건에서 AND is_custom = false/true 를 제거했습니다).

public async Task<IEnumerable<Models.Action>> ExecuteAsync (IDbConnection conn, IDbTransaction transition, long userId)
{
    string sql = @"SELECT a.id AS Id, false AS IsCustom
                   FROM actions a
                   INNER JOIN members_actions ma ON  a.id = ma.action_id 
                   WHERE ma.member_id = :userId
                   UNION
                   SELECT a.id AS Id, true AS IsCustom 
                   FROM custom_actions a
                   INNER JOIN members_actions ma ON  a.id = ma.action_id 
                   WHERE ma.member_id = :userId;";

    return await conn.QueryAsync<Models.Action> (sql, new {userId = userId}, transition);
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.