티스토리 뷰

반응형

여러 종류의 DB가 존재하지만

SQL Server는 MS계열 프로그래밍 뿐만 아니라

여러 다양한 언어와 함께 유용하게 사용되는

유명한 DB중에 하나이다.

SQL Server를 다루기 위해서는

아마도 SSMS(SQL Server Management Studio)란 툴을

많이들 사용할거라고 생각한다.

익숙한 로고

아~주 예전에는 쿼리분석기, 엔터프라이즈 등의 툴도 사용했고

지금도 현역에서 사용하는 사람들이 많겠지만....

어쨌거나...

오늘 짧게(진짜 짧게.. ㅎ) 하고자 하는 얘기는

SSMS2008에서 SSMS2012로 변경되면서 여러가지 기능들이 달라진 점 들이 많은데

그 중에서도

sp_helptext

에 대한 이야기다.

sp_helptext는 잘 알고들 있겠지만 테이블, 뷰, 프로시져 여러가지 객체들의 구성을 보여주는

사용빈도수가 굉장히 많은 시스템 프로시져이다.

근데 왜 요놈에 대한 얘기를 하냐면

2012버전으로 오면서 sp_helptext를 하면 결과창에나오는 결과에 자동으로 빈 행이 하나 추가된다는 것이다.

예를 들어 이런거다.

Create proc SP_Test
as
begin
 Select * 
 from table_ABC
end

(왜 티스토리 코드블럭에는 SQL관련은 없는건지...)

이런 간단한 프로시져를 하나 만들었다고 할 때

위 프로시져를

sp_helptext SP_test

하면

Create proc SP_Test

as

begin

 Select * 

 from table_ABC

end

이런식으로 한줄의 빈 행이 코드 사이에 자동으로 추가된다는 것이다.

이게... 왜 불편한가... 할 수도 있겠는데

경험해 보면 은근히 불편한다.

프로시져 수정할 일 이 있어서 sp_helptext해서 수정할 때마다 빈 행이 하나씩 생긴다고 생각해보면

10번 수정하면 10개의 빈 행이 생겨져 버리는 것이다.

물론 SSMS에는 "Format T-SQL Code"라는 기능이 있어서 이 기능을 선택하면 코드가 수식간에 정리가 되긴 하지만

기본적으로 코멘트의 경우에는 예외라서...

코멘트 처리되어 있는것들은 가독성이 떨어지지 않게 수동으로 행을 제거해줘야 하는 귀찮음이 남게된다.

이 문제를 어떻게 해결할 수 있을까에 대해서 많이 고민을 해봤는데

시스템 프로시져의 문제라서 수정할 수있는 것도 아니고

어찌어찌 해결하려고 해본다면 sp_heltext같은 프로시져를 하나 만들어서 사용하는건데

사실 그것도 꼭 그렇게까지 해야하나... 하는 맘이 들어서(귀찮음에....)

좀 더 검색을 해보기로 했다.

사실 이것과 관련해서 검색하기도 키워드가 좀 애매해서....

"sp_helptext", "alter", 빈 행, 개행문자 추가.. 등등 으로 검색해봤으나

나만 불편한거였는지... 아니면 다들 방법을 알고 있었던건지

딱히 내 입맛에는 맞는 결과가 별로 없었던 찰나에

외국 사이트에 나와같은 고민을 하고 있는 한 유저가 작성한 질문을 찾아냈다. ㅎㅎ

해당 질문에 대해서 답변도 달려있었는데

답변이 생각지도 못하게 너무 간단히 해결되는거라... 공들인 시간에 비해 허무했으나 반면에 놀라웠다.

답변은 다음과 같았다.

 

sp_helptext를 했을 때 자동으로 추가되는 빈 행이 발생하는 경우는

쿼리 결과를 "표 형태로 결과표시"로 했을 경우이다.

따라서 쿼리 결과를 "텍스트로 결과표시"로 변경하면 된다.

간단히 해결!

난 왜 이 생각을 하지 못했을까... ㅋㅋ

하지만 텍스트로 결과표시 하더라도

결과를 전체선택하고 복사 하게되면 맨 위에

Text

----------------------------------------------------------------------------------------------------------

까지도 복사되니 신경써야 한다.

그리고.. 이건 추가

위에서 sp_helptext와 같은 프로시져를 하나 만들어서 사용하는것도 방법이라고 했었는데

역시나 이것도 답변에 달아놓은 사람이 존재했었다.

(하늘아래 새로운게 없다는 말은 진리...)

CREATE PROCEDURE [dbo].[sp_helptext2] (@ProcName NVARCHAR(256))
AS
BEGIN
  DECLARE @PROC_TABLE TABLE (X1  NVARCHAR(MAX))

  DECLARE @Proc NVARCHAR(MAX)
  DECLARE @Procedure NVARCHAR(MAX)
  DECLARE @ProcLines TABLE (PLID INT IDENTITY(1,1), Line NVARCHAR(MAX))

  SELECT @Procedure = 'SELECT DEFINITION FROM '+db_name()+'.SYS.SQL_MODULES WHERE OBJECT_ID = OBJECT_ID('''+@ProcName+''')'

  insert into @PROC_TABLE (X1)
        exec  (@Procedure)

  SELECT @Proc=X1 from @PROC_TABLE

  WHILE CHARINDEX(CHAR(13)+CHAR(10),@Proc) > 0
  BEGIN
        INSERT @ProcLines
        SELECT LEFT(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)-1)
        SELECT @Proc = SUBSTRING(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)+2,LEN(@Proc))
  END
  --* inserts last line
  insert @ProcLines 
  select @Proc ;

  SELECT Line FROM @ProcLines ORDER BY PLID
END

인터넷 저 너머에 있는 누군가들에게 항상 감사하며 살아야겠다... ㅎㅎ

자게한 내용은 아래 링크를 참고

https://stackoverflow.com/questions/11061642/sql-server-2012-sp-helptext-extra-lines-issue

 

SQL server 2012 SP_HELPTEXT extra lines issue

I am using SQL server 2012, & always use SP_HELPTEXT to get my previously created Stored Procedures, In previous versions of SQL server there were no issues in this process but in 2012, My Stored

stackoverflow.com

 

반응형
댓글
반응형
05-17 05:57
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함