답변:
... SQL 코드의 형식을 지정하는 방법에 대한 표준 또는 규칙이 있습니까?
표준. SQL 파서에 관한 한 전체 SQL 문을 한 줄에 넣을 수 있습니다.
컨벤션에는 많은 것이 있습니다. 변경 가능성을 최대화하거나 공간을 최소화 하려는지 여부에 따라 다릅니다. 두 경우 모두 SQL 포맷터를 작성했습니다.
방금 특정 문자 조합을 사용하여 SQL 문을 중단 할 위치를 알려줍니다.
다음 은 내가 작성한 Java DB2 SQL 포맷터의 예 입니다. 다른 Java 프로그램이 Java 코드를 생성했습니다. SQL은 SYSIBM
테이블 에서 직접 가져 왔습니다 .
protected void prepareIndex00Select(String codeFacl)
throws SQLException {
StringBuffer sb = new StringBuffer();
sb.append("SELECT CODE_FACL, SEQ_FACL, FILLER_TOF ");
sb.append(" , CODE_TOF, NAME_FACL, NAME_LENGTH ");
sb.append(" , CODE_FMB, ID_NCIC_ORI, NBR_PRINTER_PREFIX ");
sb.append(" , ID_PERSONNEL_OFC, COMPLEX_CODE ");
sb.append(" , PHS_CODE, DESIG_FACL_GRP, IND_DESIG_AUTH ");
sb.append(" , CODE_FACL_I_T, INTKEY_FACL, IND_CDM_SENTENCING ");
sb.append(" , MAL_FEM_IND, DEL_AFTER, IND_INMATES ");
sb.append(" , VALUE_SO_CPU_STD, VALUE_SO_CPU_DAY ");
sb.append(" , CODE_CAT, VALUE_DCN, XIDBKEY ");
sb.append(" , FACL_FK_REGN ");
sb.append(" FROM ");
sb.append(creator);
sb.append(".FACL ");
sb.append(" WHERE CODE_FACL = ? ");
if (additionalSQL != null) sb.append(additionalSQL);
psIndex00 = connection.prepareStatement(sb.toString());
psIndex00.setString(1, codeFacl);
} // End prepareIndex00Select method
조금 늦었고, 단지 이것을 우연히 발견했습니다. 죄송합니다.
Poor Man의 T-SQL 포맷터는 오픈 소스 T-SQL 포맷터 (라이브러리, ssms 플러그인, 명령 줄 파일 포맷터 등)입니다. 구현은 상당히 모듈 식이므로 MySQL 토크 나이저 및 포맷터를 구현하기가 어렵지 않아야합니다. T-SQL과 일치시키기 위해 (현재 MySQL에 대한 경험이나 사용 경험이 없기 때문에 주로하지 않았으므로 내 시간을 잘 사용하지 못합니다).
라이브러리는 AGPL 라이센스와 함께 C # (2.0)으로 구현됩니다. 즉, 수정없이 게시하지 않고 상업적으로 재배포하거나 공용 서비스로 공개 할 수는 없지만 사내 사용자의 경우 사용자 지정 여부에 관계없이 문제가 발생하지 않습니다. 아니.
@Gilbert Le Blank가 이미 대답했듯이 SQL 형식에 대한 표준은 없습니다. 상용 형식 기조차도 제공하는 다른 옵션이 동일하거나 동일한 기본값으로 수렴하지 않거나 반드시 동일한 출력 형식을 지원하지 않습니다.
자신의 도구를 처음부터 작성하는 것과 관련하여 적어도 T-SQL의 경우, CTE WITH 절, MERGE 문, 하위 쿼리 및 SQL 멀티 문 배치를 처리하는 등 다양한 경우를 처리 해야하는 경우 도구에 대해 조언합니다. 파생 테이블 등은 꽤 어렵습니다. :)
도움이되는 경우 : http://www.architectshack.com/PoorMansTSqlFormatter.ashx