그냥 갑자기 궁금해서.... 질문드려봅니다.

프로그램 내에서 쿼리를 짜고 DB로 부터 데이터셋을 받아서 처리하는 것이 사실
제가 하는 일인데요

예전부터 선배들이 그렇게 알려줬기 때문에 이런식으로 vb내에서 이런식으로 쿼리를 문자열변수에 작성하였습니다.

strSql = strSql + vbCrLf +" select * from data “;
strSql = strSql + vbCrLf +” where 1= 1 “;
strSql = strSql + vbCrLf +” and 2=2";

이번에 이직하게 되어 회사를 옮기게 되서 소스를 보니

sSQL = @“select distinct
col1
from data
where 1=1”;
이런식으로 코딩이 되어 있더라구요.
물론 전 회사에서는 VB를 다루었습니다. 옮긴회사는 C#이구요

아무래도 오랫동안 제 방식대로 코딩을 하다보니 보는것도 편하고 새로운 방식은 볼때는 그렇다쳐도
디버깅 할때 문자열을 추출하여 sql에 붙여넣기를 하면 쿼리가 한줄로 나와서 영 저는 불편하더라구요
그래서 작성할때 좀더 손이가도 제방식대로 코딩을 하고 있었는데요.
갑자기 그냥 문득 저방식을 쓰는대는 이유가 있을거 같은데 왜 그럴까 싶습니다 .

혹시 어떻게 작성들 하시나요?
만약 아래방식대로 하시면 디버깅할대 불편하지 않으신가요??

3개의 좋아요

아무리 proc 를 쓰더라도 인라인 쿼리를 쓰는것 어쩔수 없는것 같구요
@Yoonique 님같이 저도 select 절 from절 where 절 되도록
분할해서 쓰는 스타일입니다. 그나마 디버깅할려며 조금 편해서요
뭐가 맞다고 하기에는 그렇지만 나눠서 하는것이 좋을것 같군요

4개의 좋아요

log 찍어서 보세요

3개의 좋아요

아래 방식은 코딩 짤 때 가독성이 높아 보이고, 프로그램 실행 없이 문제 판단이 용이해보이네요.

저는 꼼수이긴한데 StringBuilder를 사용하고 AppendLine를 이용하여 줄단위로 쿼리를 넣습니다. ToString 이전에 StringBuilder 객체 데이터에 마우스 오버 혹은 조사식을 통해 값 복사하면 개행까지 다 된게 클립보드에 저장되더라고요 ㅋㅋㅋ

5개의 좋아요

저는 쿼리를 사용하지 않지만, 쿼리를 사용하는 강의에서 아래 방식을 사용하는 경우를 종종 볼 수 있는데, 데이터 베이스 클라이언트의 쿼리 편집창에서 쿼리를 작성하면서 쿼리에 대한 디버깅을 하고, 완성된 쿼리를 소스 코드에 복붙하면 저런 형태가 되더군요.

그런데, 디버깅 관점으로만 본다면, 뭐가 되었든 쿼리를 소스 코드에 문자열로 사용하는 방식은 IQueryable Linq를 사용하는 것보다 불리하다고 할 수 있을 것 같습니다.

3개의 좋아요

흠… 이상하군요. 앞의 방법이나 뒤의 방법이나 \r\n 아니면 \n이 붙은 상태로 문자열이 완성되는 것은 같을텐데. 알려주신 코드를 놓고 디버거에서 양쪽이 어떻게 달라지나 살펴봐도 차이점은 없어보입니다.

결국 어느쪽이든 개행이 된 텍스트를 얻기 위해서는 ‘보기’ 버튼을 눌러 새 창에서 텍스트 렌더링 결과를 전체적으로 살펴보고 복사/붙여넣기를 해야 하는 것은 변함이 없는 것 같은데, 어떤 조건에서 그런 불편함이 있는 것인지 좀 더 자세히 알 수 있을까요? :thinking:

5개의 좋아요

저는 아래처럼 사용하는데,
$를 사용해서 라인과 줄을 맞춰서 가독성을 높이고,
@를 사용해서 변수를 삽입합니다.
디버깅할때도 입력한 그대로 나오기 때문에 문제는 없네요.

저도 처음에는 Yoonique님처럼 + 연산자를 사용해서 쿼리를 완성했는데,
일단 이중따옴표와 + 기호 때문에 가독성이 떨어지고, 특히나 insert, update할때 파라미터가 많을 경우 복잡해져서 현재는 $@만 사용하고 있습니다.

string query = $@“SELECT A, B, C
FROM COMMON.MYTABLE MY
WHERE 1 = 1
AND A = {value1}
AND B = {value2}
AND C = {value3}
GROUP BY A, B, C
ORDER BY A”;
(에디터에서 왼쪽 공백을 다 삭제해서 왼쪽 정렬처럼 보이는데, SELECT 라인에 맞춰서 정렬한 상태임)

5개의 좋아요

?? 지금해보니 잘 되네요.
예전에 분명이 했을때 디버깅할때 너무 짜증나서 한 기억이 있는데… 제가 착각 했나봅니다…
후자 방법을 좀더 사용해봐야 될거 같습니다. ;;

3개의 좋아요