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] 거의 정반대의 행복

 


제목: 거의 정반대의 행복

저자: 난다

출판사: 위즈덤하우스

장르: 에세이


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

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

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