[Solution] MSSQL 테이블 변경 에러


테이블 컬럼 설정 변경 시

ex) NOT NULL to Nullable


테이블 컬럼 수정 후 저장 시 아래와 같은 경고 팝업이 뜸 


변경 내용을 저장할 수 없습니다. 변경 내용을 적용하려면

다음 테이블을 삭제하고 다시 만들어야 합니다. 

다시 만들 수 없는 테이블을 변경했거나 

[테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함]

옵션을 설정했습니다.

 

Solution)


도구 > 옵션 > 디자이너(Designers) > 우측 아래 [테이블을 다시 만들어야 하는 변경 내용 저장 안 함] 체크 해제


[MSSQL] 프로시저(stored procedure)내 문자열 검색, 문자열 찾기

How to find specific text in stored procedure



프로시저내에서 특정 문구를 검색 할 경우 사용


RIGHT WAY)


--1) 

SELECT DISTINCT a.name

FROM sysobjects AS a

LEFT JOIN syscomments AS b ON a.id = b.id

WHERE a.xtype = 'P'

AND b.text LIKE '%[TEXT]%'


--2)

SELECT OBJECT_NAME(object_id), OBJECT_DEFINITION(object_id) 

FROM sys.procedures 

WHERE OBJECT_DEFINITION(object_id) LIKE '%[TEXT]%'



아래와 같은 방법은 ROUTINE_DEFINITION이 nvarchar(4000)의 한계를 가지고 있어서 제대로 된 검색결과가 나오지 않음


WRONG WAY)


SELECT * FROM INFORMATION_SCHEMA.ROUTINES 

WHERE ROUTINE_TYPE='PROCEDURE' 

AND ROUTINE_DEFINITION LIKE '%[TEXT]%'



Dev Express ButtonEdit 버튼 숨기기


How to disable or read only or hide ButtonEdit button in Dev Express



form 디자인 작업시

...으로 보이는 ButtonEdit버튼을 지워야 하는 경우가 있음.


When you design form, 

Sometimes you need disable or hiding ... button in column.


buttonEdit1.Properties.Button[0].Visible = false;


[C#] DateEdit Control 특정 날짜만 선택가능


DateEdit control 생성


-- 특정 날짜 이외에 disabled

private void dateEdit1_DrawItem(object sender, DevExpress.XtraEditors.Calendar.CustomDrawDayNumberCellEventArgs e) {

        

//매주 월요일만 가능 || 오늘 이전 회색

if(e.Date.DayOfWeek != DayOfWeek.Monday) || (e.Date < Date.Now.Date)) {

           e.Style.ForeColor = Color.Gray;

}

}

private void dateEdit1_EditValueChanging(object sender,DevExpress.XtraEditors.Controls.ChangingEventArgs e) {

       if(Convert.ToDateTime(e.NewValue,System.Globalization.CultureInfo.InvariantCulture).DayOfWeek != DayOfWeek.Monday) || 

   (Convert.ToDateTime(e.NewValue,System.Globalization.CultureInfo.InvariantCulture) < Date.Now.Date)) {

          e.Cancel = true;

}

}




[C#] 수행시간 구하기


실행시간 구하기

가끔 수행시간을 기록하거나 얼마나 소요되는지 검색해야할 경우가 있음.


실행시간을 구하는 방법은 DateTime.Now, TimeSpan, Stopwatch등을 사용하면 됨


stackoverflow에서 대용량 데이터를 핸들링 하는 경우 Stopwatch가 더 빠르다고함.

실제 2500여건 조회 결과, 

Stopwatch가 Datetime과TimeSpan을 쓴 것 보다 0.003정도로 미세하게 빠름


제일 빠른건 DateTime.UtcNow


Stopwatch 사용법


using System.Diagnostics;


Stopwatch SW = new Stopwatch();

string sTime1, sTime2;



//초기화

SW.Reset(); 

//SW시작

SW.Start();

//SW.Restart()와 같은 동작



//

//Do Work

//



//SW타이머가 실행중이면

if (SW.IsRunning)

{

//SW종료

SW.Stop();


//총 경과시간 (0.254)

sTime1 = SW.Elapsed.ToString();


//밀리초 단위의 총 경과시간(5682)

sTime2 = SW.ElapsedMilliseconds.ToString();


//HH:MM:SS.0000000 양식 (00:00:07.1985280)

sTime2 = (SW.ElapsedMilliseconds / 1000.0f).ToString();


}





'Programming > C#' 카테고리의 다른 글

[C#] 수행시간 구하기  (0) 2018.08.21
[C#/WinForm] 창 크기 조절하기  (0) 2018.08.20
[C#] C#이란  (0) 2018.04.19

[C#/WinForm] 


윈도우 폼 크기 조절하기

윈도우 창 크기 조절하기


속성


- AutoSize


 false

 크기 조절 불가

 true

 크기 조절 가능


- AutoSizeMode


 GrowOnly

 수동으로 조절가능, 설정된 크기보다 작게 조절은 불가능

 GrowAndShrink

 폼 비율 유지, 수동으로 조절 불가능



FormBorderStyle


 None

 폼 외곽 없음, 크기 변경 불가

 FixedSingle

 폼 외곽 단순 선, 크기 변경 불가

 Fixed3D

 폼 외곽 3D선, 크기 변경 불가

 FixedDialog

 폼 외곽 두꺼운 선, 크기 변경 불가

 Sizable

 크기 변경 가능 (폼 외곽은 fixedsingle과 같음)

 FixedToolWindow

 도구창, 크기 변경 불가능

 SizableToolWindow

 도구창, 크기 변경 가능


'Programming > C#' 카테고리의 다른 글

[C#] 수행시간 구하기  (0) 2018.08.21
[C#/WinForm] 창 크기 조절하기  (0) 2018.08.20
[C#] C#이란  (0) 2018.04.19

Dev Express Error (14.2버전에선 해결 방법 없음)


form 디자인 작업시

복사, 붙여넣기 되지않을 때가 있음.


버전 14.2의 경우

복사할려는 폼에 layout control이 있을경우 

붙여넣기 되지않는 현상 발생, 

해당버전에선 해결되지 않은것으로 보임.....

상위 버전에서 해결 되었다고 함.



When you design form, 

Sometimes cannot copy and paste form to form.


It is layout control form error.

Even if you try to copy other control, you cannot paste it, if form has any layout control.


ex) you need copy A form to B form.

If A form has layout control, cannot copy B form (version DX 14.2)


It was solved in upper version.




[MSSQL] 사용자 정의 테이블 형식 지정 및 사용


--생성 CREATE


프로그래밍 기능 > 유형 > 사용자정의테이블형식 > CREATE


CREATE TYPE [MYTABLETYPE] AS TABLE(

column1 int(10),

column2 varchar(10)

)

GO


-- 삭제 DROP


DROP TYPE [MYTABLETYPE] 

GO


-- 사용 USE


프로시저에서 부를 경우 

CREATE PROCEDURE sp_AAA

@count int,

[@변수명] [사용자정의테이블형식] READONLY //READONLY필수

AS


How to use in procedure 

CREATE PROCEDURE sp_AAA

@count int,

[@param] [userType] READONLY //READONLY is mandatory

AS


ex)

CREATE PROCEDURE sp_AAA

@count int,

@T_테이블 MYTABLETYPE READONLY

AS


--인덱스 생성


CREATE INDEX [INDEX NAME]

 ON [TABLE NAME](COLUMN NAME)


--인덱스 정보 확인

--인덱스명(index_name), 인덱스 설명 (index_description), 인덱스 키(index_keys)


EXEC sp_helpindex


--인덱스 정보조회 (단편화)


DBCC showcontig [TABLE NAME]


--인덱스 통계보기


DBCC show_statistics ([TABLE NAME], [INDEX NAME])


*참고

Updated : 통계가 최종 업데이트 된 날짜

Rows: 총 행수

Rows Sampled : 샘플링된 행 수 (통계 정보를 구하기 위해 샘플링된 행 수로 행 수가 많을 경우 샘플링함)

Steps : Histogram 단계수(MAX 200단계, 고유 인덱스가 아닐 경우 단계수 많아짐)

Average Key Length : 컬럼 값의 평균 길이 

All density : 밀도 (최대 1)

RANGE_HI_KEY : 각 Step에서 샘플링된 최대 값.

RANGE_ROWS : 각 Step에서 RANGE_HI_KEY값을 제외한 값의 개수.

EQ_ROWS : 최대값 개수.

DISTINCT_RANGE_ROWS : RANGE_ROWS 컬럼 값들중 중복되지 않는 값의 개수.


--인덱스 조각 모음 (*인덱스 다시 잡음, 시간걸림)


DBCC dbreindex ([TABLE NAME])


--모든 인덱스 다시 잡기 (*엄청난 시간 걸릴 수 있음. 주의!!!)


DBCC dbreindexall('[DB NAME]')


--인덱스 테이블 통계 업데이트


UPDATE STATISTICS [TABLE NAME]


참고 : https://docs.microsoft.com/ko-kr/sql/relational-databases/system-stored-procedures/sp-helpindex-transact-sql?view=sql-server-2017



[MSSQL] NUMERIC 선언 방법


NUMERIC([최대 자릿수], [소수점 아래 자릿수]) 로 

소수점 아래 자리를 선언하지 않아도 실행에는 상관 없으나 

받은 값에 소수점 아래 자리가 있을 경우 전체가 표기되지 않음


--SELECT Result : 55000

DECLARE @MONEY NUMERIC(10)


--SELECT Result : 55000.5

--DECLARE @MONEY NUMERIC(10,1)


--SELECT Result : 55000.56

--DECLARE @MONEY NUMERIC(10,2)


--SELECT Result : 55000.568

--DECLARE @MONEY NUMERIC(10,3)


SET @MONEY = '55000.568'

SELECT @MONEY


+ Recent posts