2022년 8월 12일 금요일

[VBA] findNext 에러 제어

 vba에서 find 함수를 찾는데 이어서 찾기 위해 findnext를 쓴다.

하지만 더 이상 찾는 데이터가 없으면 에러이다.

이 경우 에러를 뱉고 프로그램이 멈추기 때문에 따로 처리가 필요하다.

아래와 같음

1
2
3
4
5
6
7
8
9
Dim wb As Excel.Workbook, oRange As Range
' FindNext 함수의 에러가 발생할 수 있으므로 객체에 넣는다
' find 구문 있어야함 (생략)
 
Set oRange = wb.Worksheets(i).Cells.FindNext(After:=ActiveCell) ' 다음 데이터가 없으면 oRange값은 Nothing이 
 
If Not oRange Is Nothing Then
    ' FindNext가 정상일 경우 처리
End If

2022년 6월 20일 월요일

[SSRS] Line Break Expression

SSRS의 텍스트 표현식에서 \n(줄바꿈)을 입력해줘야 할때

Environment.NewLine 을 입력해준다.

vbcrlf 를 입력해주라는 글도 있지만 명확하게 알 수 있는 Environment.NewLine 이 더 좋은 것 같다.


출처


2022년 5월 2일 월요일

[SQL Server] CPU Share Query Ranking

 

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
32
-- ===== [CPU] =====
-- CPU 점유율 높은 쿼리 확인
;WITH cte AS
(
    SELECT  stat.[sql_handle]
          , stat.statement_start_offset
          , stat.statement_end_offset
          , COUNT(*) AS NumExecutionPlans
          , SUM(stat.execution_count) AS TotalExecutions
          , ((SUM(stat.total_logical_reads) * 1.0/ SUM(stat.execution_count)) AS AvgLogicalReads
          , ((SUM(stat.total_worker_time) * 1.0/ SUM(stat.execution_count)) AS AvgCPU
    FROM sys.dm_exec_query_stats AS stat
    GROUP BY stat.[sql_handle], stat.statement_start_offset, stat.statement_end_offset
)
SELECT CONVERT(DECIMAL(15,5), cte.AvgCPU) AS AvgCPU
    , CONVERT(DECIMAL(155), cte.AvgLogicalReads) AS AvgLogicalReads
    , cte.NumExecutionPlans
    , cte.TotalExecutions
    , DB_NAME(txt.[dbid]) AS [DatabaseName]
    , OBJECT_NAME(txt.objectid, txt.[dbid]) AS [objectName]
    , SUBSTRING(txt.[text], (cte.statement_start_offset/2)+1,
    (
        (CASE cte.statement_end_offset
            WHEN -1 THEN DATALENGTH(txt.[text])
            ELSE cte.statement_end_offset
        END - cte.statement_start_offset)/2
    ) +1
    ) AS query_text
FROM cte
CROSS APPLY sys.dm_exec_sql_text(cte.[sql_handle]) txt
ORDER BY cte.AvgCPU DESC;
 



[SQL Server] Memory Status

 

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
-- ===== [MEMORY] =====
-- SQL MAX memory 확인
EXEC sp_configure 'max server memory';
 
-- SQL MAX memory 설정
--DECLARE @maxMem INT = 3000 -- MAX. MB 단위로 입력
--EXEC sp_configure 'show advanced options', 1
--RECONFIGURE
 
--EXEC sp_configure 'max server memory', @maxMem;
--RECONFIGURE
 
-- SQL MIN memory 확인
EXEC sp_configure 'min server memory';
 
-- SQL MIN memory 설정
--DECLARE @minMem INT = 3000 -- MAX. MB 단위로 입력
--EXEC sp_configure 'show advanced options', 1
--RECONFIGURE
 
--EXEC sp_configure 'min server memory', @minMem;
--RECONFIGURE
 
-- OS 메모리 정보 확인(단위(GB))
SELECT CONVERT(DECIMAL(5,2), total_physical_memory_kb/1048576.0) AS Total_P_Mem_GB        -- total_physical_memory
      ,CONVERT(DECIMAL(5,2), available_physical_memory_kb/1048576.0) AS Avail_P_Mem_GB    -- available_physical_memory
      ,CONVERT(DECIMAL(5,2), total_page_file_kb/1048576.0) AS Total_page_file_GB            -- total_page_file_kb
      ,CONVERT(DECIMAL(5,2), available_page_file_kb/1048576.0) AS Avail_Page_file_GB        -- available_page_file
      ,ROUND(100.0 - (100.0*available_physical_memory_kb/total_physical_memory_kb),2) AS Percentage_Used
      ,system_memory_state_desc
FROM sys.dm_os_sys_memory;



[SQL Server] 권한 부여 안된 유저 확인

유저에 대한 권한이 부여가 안된 리스트 출력

Version: MS-SQL 2017


1
2
3
4
5
6
7
8
9
10
DECLARE @GranteeName NVARCHAR(50= N'username'
        ,@PermissionType CHAR(2= ''
        ,@ObjectType      CHAR(2= ''
SELECT SCHEMA_NAME(o.schema_id) + '.' + o.name AS ObjectName 
FROM sys.objects AS o
LEFT JOIN sys.database_permissions AS dp ON o.object_id = dp.major_id AND dp.type = @PermissionType
LEFT JOIN  sys.database_principals AS dpr ON dp.grantee_principal_id = dpr.principal_id
    AND dpr.name = @GranteeName
WHERE o.type = @ObjectType
    AND dpr.name IS NULL



[SQL Server] sys.objects type LIST

SELECT DISTINCT Type FROM sys.objects;

type char(2)

Object type:

AF = Aggregate function (CLR)

C = CHECK constraint

D = DEFAULT (constraint or stand-alone)

F = FOREIGN KEY constraint

FN = SQL scalar function

FS = Assembly (CLR) scalar-function

FT = Assembly (CLR) table-valued function

IF = SQL inline table-valued function

IT = Internal table

P = SQL Stored Procedure

PC = Assembly (CLR) stored-procedure

PG = Plan guide

PK = PRIMARY KEY constraint

R = Rule (old-style, stand-alone)

RF = Replication-filter-procedure

S = System base table

SN = Synonym

SO = Sequence object

U = Table (user-defined)

V = View

EC = Edge constraint

Applies to: SQL Server 2012 (11.x) and later.

SQ = Service queue

TA = Assembly (CLR) DML trigger

TF = SQL table-valued-function

TR = SQL DML trigger

TT = Table type

UQ = UNIQUE constraint

X = Extended stored procedure

Applies to: SQL Server 2014 (12.x) and later, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System (PDW).

ST = STATS_TREE

Applies to: SQL Server 2016 (13.x) and later, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System (PDW).

ET = External Table


출처

2022년 4월 27일 수요일

[SQL Server] Mysql 링크드 서버 OpenQuery 로 View 만들기

 버전: SQL Server 2017

SQL Server에서 연결된 Mysql 링크드 서버에서 가끔 Openquery를 사용해서 데이터를 조회한다. '(quotation) 표기도 헷갈리고 Where절에 파라미터를 넘기는 것도 복잡해서 찾아보니 Openquery 자체를 view로 만들수 있었다.

1
2
3
4
5
6
7
8
-- View 만들기
Create View ViewName
AS
SELECT * FROM OPENQUERY( LinkedserverName, 'SELECT * FROM MysqlTable' ) Query
 
-- View 실행
DECLARE @id INT = 1 
SELECT * FROM ViewName WHERE id = @id;

참고링크



2021년 8월 17일 화요일

[다독프로젝트 +100] 제로웨이스트는 처음인데요

제목: 제로웨이스트는 처음인데요

저자: 소일

출판사: 판미동

장르: 사회과학


이전에도 실천하고 싶었지만 방법을 잘 몰랐다. 임신과 출산을 하고 더 관심을 갖게 되어 읽어봤다. 제로웨이스트라는 말 자체가 생소할 수 있지만 천천히 하나 하나 바꿔가야 하는 것은 맞다. 현재 내가 하고 있는 것은 비누로 머리 감기, 그리고 아기의 기저귀를 생분해가 가능한 것을 사용하는 것이다. 기저귀가 썩는데 500년이 걸린다니 정말 무서웠다.

나만 실천한다고 해서 달라질게 뭐가 있냐라는 생각이 들기도 하지만 생각해보면 독립운동도 한 명 한 명이 모여 실천한 것 아닌가.

그런 의미에서 다른 사람들도 책을 볼 수 있도록 중고 서점에 책을 내놔야겠다.





2021년 2월 26일 금요일

[mysql] 프로시저 실행 시간 확인

프로시저 성능 확인을 위해 각 쿼리의 실행시간이 궁금한 경우가 있다.

slowquerylog를 확인하는 것도 좋지만 명확하게 어떠한 프로시저의 실행 시간이 궁금한 경우

다음 방법이 편해서 공유한다.


1
2
3
set profiling=1;
call proc_name();
show profiles;
cs


해당 프로시저 내의 각 쿼리들의 실행결과를 보여주므로 가장 느린 쿼리에 대한 튜닝이 가능해서 편리하다.


출처: 스택오버플로우



2021년 2월 23일 화요일

[다독프로젝트 +99] 뭘할지는 모르지만 아무거나 하긴 싫어

제목: 뭘할지는 모르지만 아무거나 하긴 싫어

저자: 이동진, 최경희, 김주은, 민세은

출판사: 트래블코드

장르: 경제경영


에세이인 줄 알고 책 제목만 보고 샀는데 전혀 다른 책이었다.

특별한 세계 곳곳으 가게들을 소개해주는 책이었다.

처음에는 약간 지루한 면이 없잖아 있었지만...(이건 개인의 취향이다.)

특이한 마케팅 이야기에 끌리기도 했다.

여행을 좋아하고, 여행지의 특별함을 찾고 싶은 사람이라면 좋아할 만한 책같다.




2021년 2월 7일 일요일

[다독프로젝트 +98] 오두막 편지

 


제목: 오두막 편지

저자: 법정스님

출판사: 이레

장르: 에세이


읽는데 너무 오래 걸렸다.

읽다 보면 졸리고 읽다 보면 졸리고, 천천히 읽었다.

책이 오래 전에 쓰인 책이라 아무래도 지금의 사정과는 조금 다른 감이 있기도 했다.

2021년에 IMF 이야기라니...

그래도 왠지 끝까지 읽고 싶은 마음에 완독했다.

다 읽고 나니 개운한 느낌이었다.

이 책은 나와 맞지 않았지만 다른 책은 맞지 않을까?

좀 더 찾아 봐야겠다.




2021년 1월 24일 일요일

[다독프로젝트 +97] 애쓰지 않고 편안하게

 



제목: 애쓰지 않고 편안하게

저자: 김수현

출판사: 놀(다산북스)

장르: 에세이


'나는 나로 살기로 했다'를 재미있게 봐서 구매했다.

쉽게 쉽게 읽히고, 기억할 만한 몇 문장도 있었지만 아!하는 탄성을 자아내지는 못했다.

뭐~ 항상 만족하는 책을 읽을 수 있는 건 아니니까.

제목처럼 마음을 편안하게 하고 싶을 때 읽으면 좋을 것 같다.




2021년 1월 18일 월요일

[다독프로젝트 +96] 거의 정반대의 행복

 


제목: 거의 정반대의 행복

저자: 난다

출판사: 위즈덤하우스

장르: 에세이


아이를 임신하고 키우면서 느낀 점을 담백하게 써내려간 에세이였다.

제목에 맞게 아이가 있기 전 후의 행복이 다름이 고스란이 느껴졌다. 이전의 행복이 그립겠지만 되돌릴 수 있다면 정반대가 되어버린 행복도 만족할 수 있지 않을까 하는 생각이 들었다.

육아가 많이 바빴을 텐데 일기를 꼼꼼히 쓴 작가가 새삼 대단하다고 느껴졌고, 따뜻한 그림체에서 딸을 사랑하는 마음도 느껴져 참 좋았다.




2021년 1월 15일 금요일

[SSRS] 텍스트 특정 글자 색깔만 변경하기

SSRS 버전: Microsoft SQL Server Reporting Services Designers Version 14.0.1016.268

SQL 버전: SQL 2017 Standard


기존 SSRS에서 텍스트 컬러를 변경 하려면 보통 SSRS에서 제공하는 속성의 Font에서 수식을 이용해 수정했다.

전체 컬러의 색깔만 변경해야 할 때는 해당 방법이 매우 유용했다. 

RS에서 수식을 활용해서 경우에 따라 색깔을 다르게 사용할 수 있었다.


그런데 특정 부분만 색깔을 변경해야 하면 어떻게 해야 할까?

예를들면

나는 오늘 월급을 받았다. 의 월급이라는 글자만 컬러를 변경하고 싶을때

나는 오늘 월급을 받았다. 이런식으로 말이다.


참고한 블로그

1. 텍스트에서 글자부분의 속성을 HTML-Interpret HTML tags as styles를 선택

2. Values에 Expression창을 선택해 HTML태그를 이용해 작성 해주면 된다.


내 경우 2번의 방법이 적용되지 않았다.

그래서 SQL에서 데이터를 가지고 올 때부터 HTML 태그를 붙여서 가지고 왔다.


결과물은 아래와 같다.


증가는 파란색, 감소는 빨간색 부분에 HTML 태그를 넣어주었다.
예상대로 SSRS에서 HTML렌더링을 해준다.





2021년 1월 1일 금요일

[다독프로젝트 +95] 하마터면 열심히 살 뻔했다

 



제목: 하마터면 열심히 살 뻔했다

저자: 하완

출판사: 웅진지식하우스

장르: 에세이


사람이 사는 방식은 정말 다양하다.

20살 때 부터 생활비를 혼자 벌며 아등바등 살아온 나와는 정말 다른 삶을 사는 저자를 보면서 부러우면서도 안타까우면서 그런 느낌이 들었다.

결국 삶을 살아내는 것은 자신이므로 누구의 삶에 대해 평가를 하는 것은 옳지 않다. 나도 몰래 평가 하고 있는 것 같아서 반성했다. 죄송해요. 작가님..

담담하게 자신의 이야기를 풀어쓰는 것도 마음에 와 닿았고, 열심히 살지 않았다고 하지만 책도 내고 자신의 삶을 묵묵히 살아내는 것이 부럽기도 했다.

가끔은 열심히 살아도 되고, 적당히 열심히 살지 않아도 되는 것 같다.





2020년 12월 10일 목요일

[SSIS] 0xc020204a Error

패키지를 수정한 적 없는데

갑자기 데이터셋의 조회가 되지 않는다.



일단 소스의 변화는 SQL 버전이 업그레이드 된것. 2008 -> 2016

처음 데이터 셋의 OLE DB 속성값을 바꾸라고 했는데. 여전히 동일한 에러가 발생했다.

OLE DB 속성


찾아보니 동일한 에러를 처리한 경우가 있었고, 기록용으로 남겨둔다.

해결방안링크

해결은 했지만 왠지 찝찝하다.

SSIS는 정말 알 수 없는 에러가 너무 많아서 항상 새롭다.





2020년 10월 24일 토요일

[다독프로젝트 +94] 나의 하루는 4시 30분에 시작된다

제목: 나의 하루는 4시 30분에 시작된다

저자: 김유진

출판사: 토네이도

장르: 자기계발


정말 오랜만의 블로그다.

내 블로그에서 나름 애정하는 콘텐츠인 다독 프로젝트!

사실 한동안 번아웃이 와서 정말 블로그를 방치했다. 마지막 다독 프로젝트가 5월 29일 이면 정확히 내가 번아웃이 온 시점과 비슷하다.

내 게으름을 깨보고자 평소 구독하던 유튜버의 책을 구매했다.

보고있으면 동기부여도 되지만 난 왜 못하나라는 자괴감이 들 때도 있지만... 사실... 이 자괴감이 나를 갉아먹는 다는 걸 깨달아야 한다. (이 책은 뭐라도 하자 라는 생각에 구매한 책이다.)

사실 1분기 쯤에 새벽에 일어났던 적이 있다. 결국 나와 타협해서 지금은 겨우 눈을 뜬다.

여타 다른 자기계발서처럼 시간을 지키거나 꼭 매일 일어나야한다는 압박감을 쓰지 않아 좋았다. 


p.73

알람이 울렸을 때부터 책상 앞에 앉을 때까지 매일 아침의 루틴은 자동으로 이루어진다. 가끔은 내가 이 행동을 했는지 기억이 나지 않을 때도 있다. 그만큼 무의식적으로 몸에 배어버렸기 때문이다. 


그렇다. 나는 아직 몸에 배지 않았다. 그래서 '정신이 들면 일어나자'라는 것이 몸에 배도록 요즘 훈련중이다. 그리고 스마트폰도 가급적 잠자리에 놓지 않으려한다. 


이 책은 알라딘 중고서점에 팔 계획이 없을 것 같다. 가끔 꺼내보면서 마음 다지기 좋을 것 같다. 




2020년 8월 25일 화요일

[SSRS] Date Format

 SSRS 속성으로 Date format을 설정하고 웹에서 확인 했을 때 내가 원하는 형식이 아닌경우가 있다.

나는 yyyy-MM-dd 형식을 원해서 설정했으나 배포 후 확인 하면 결과가 다르게 나온다.
이럴 경우 expression에서 강제로 설정해야 한다.

기본적으로 text box의 properties의 format 속성이 아닌 expression에 Format 함수를 이용해서 강제 적용 하는 것이다.

방식은 =Format(Fields!name.Value, "yyyy-MM-dd") 이렇게 사용하면 된다.

출처



2020년 6월 22일 월요일

[SSIS] SQL Agent에 Parameter 넘기기


SSIS 패키지 생성 후 보통 SQL Agent에 등록해서 주기적으로 실행해서 원하는 데이터를 만든다. 그런데 동일한 기능이지만 기간 범위를 다르게 실행해야 할 때, 어떻게 해야 할까?
동일한 패키지를 여러개 만들어야 할까 아니면 하나의 패키지에 변수를 따로 전달 해줄까?

전자의 방법은 이미 알고 있고 후자의 방법을 새로 적용 해봤다.

이 방법을 적용하기 위해서는 SQL Agent에서 패키지에 변수를 넘겨주면 된다.



SQL Agent > New Job > Tasks > Type: SQL Server Integration Services Packages > Package Source: File System > Set Values Tab

Property Path 에 \Package.Variables[Database_Name].Value
Database_Name에 해당 패키지에 사용하는 변수 명을 넣고 
Value에 넘기고자 하는 입력하면 완료 된다.

테스트 결과 원하는 대로 데이터를 가지고 올 수 있다.



2020년 6월 10일 수요일

[VBA] 문자 깨짐 현상


VBA로 게임 아이템들을 정리하는데
왜 자꾸 중문이 깨지는가...
계속 계속 계속... 찾다가...
결국 실장님 도움 받았다.

excel version: Office 365

아직 알 수 없으나 소스코드는 다음과 같다.

' 변경 전
DBPath = ThisWorkbook.FullName
strCon = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';IMEX=1"
 
' 변경 후
DBPath = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"


연결 정보의 Provider를 변경하고, Extended Properties를 추가했다.

이렇게 하고 실행하니 아주 잘 된다.

일하면서 짬짬히 작업하고 있던 데이터였는데 막힌 부분을 뻥 뚫어줘서 기분이 너무 좋다.

다른 사람들이 참고도 하고 난 분명 잊을 테니 블로그에 기록해둔다.