728x90


Ms-Sql의 컬럼을 암호화하기 위한 내장함수가 있다.

-PwdEncrypt : 컬럼의 데이터를 암호화한다. ex. PwdEncrypt('암호화할 데이터')
-PwdCompare : 암호화한 데이터를 비교해서 확인한다. ex. PwdCompare('데이터', 암호화컬럼)

간단 예제

create table TEST (
--password varchar(100) varbinary(500)
password varbinary(500) -- varbinary 타입으로 하자

);

테이블을 만든 후

insert into TEST values (PwdEncrypt('1111'));

데이터를 암호화하여 넣은 후 select해보자

select PwdCompare('1111', password) from TEST
결과 : 1

select PwdCompare('2222', password) from TEST
결과 : 0

PwdCompare의 결과는 1이나 0으로 리턴된다. 1이면 맞는거고 0이면 틀린것이다.
 

 MySQL 에서는 password()

 

1. PwdEncrypt - 암호화

PwdEncrypt('암호화문자')

ex) INSERT INTO members(user_id, password) VALUES('myid', PwdEncrypt('mypwd'))

 

2. PwdCompare - 비교

PwdCompare('비교대상문자', '암호화 된 문자')
->양쪽이 같으면 1을 리턴 다르면 0 리턴, 둘중하나가 NULL 이면 NULL 을 리턴

ex) SELECT PwdCompare('1234', password) FROM members WHERE user_id = 'myid'

728x90
728x90

Math.Round는 반올림 함수이다.

반올림 하려는 자릿수가 5인 경우 보통 올림이 된다고 생각하는데 Math.Round는 그렇지 않다.

예) Math.Round(3.125, 2) --> 예상값 : 3.13 이라고 생각하지만 실제 결과값 : 
3.12
예) Math.Round(3.135, 2) --> 예상값 : 3.14, 결과값 : 3.14

그 이유인즉, Round 함수는 통계학 함수이다.

Round 함수는 반올림되는 수 바로 앞의 값이 짝수인 경우 버림이 되고, 반올림 되는 자릿 수의 값이 홀수인 경우 올림이 된다.

이렇게 함으로써 확률적으로 실제 평균값에 가깝도록 만드는 것이다.

이런 방식을 금융권에서도 쓰고 있다. 이러한 방식을 Banker's Rounding 방식이라고 한다.

닷넷의 Round 함수를 이용할때 MidpointRounding.AwayFromZero 파라미터의 여부에 따라 다른 값을 가질 수 있다.

* Math.Round(3.125, 2, MidpointRounding.AwayFromZero) --> 결과값 : 3.13
* Banker's Rounding 방식 : Math.Round(3.125, 2) --> 결과값 : 3.12

728x90

'개발및업무 > C#' 카테고리의 다른 글

dll 파일 생성 방법  (0) 2010.12.11
Windows Presentation Foundation 소개  (0) 2010.12.11
클래스와 멤버변수  (0) 2010.12.03
자바스크립트 substring 과 substr의 차이  (0) 2010.09.24
.NET Compiler  (0) 2010.08.10
728x90

자바스크립트에서 substring 은 문자열을 끊을때 시작점과 끝점을 설정하여 그 안에 포함된 문자열을 가져온다.
주의해야 할것은 시작점과 끝점은 인덱스라 하여 0번 부터 시작이다. 

예를 들어
ABCDEF 라는 문자열이 있을때
순서 A가 1번 부터가 아닌 0번 부터 시작 되는것이다.

ABCD 문자열을 뽑고 싶다면 변수.substring(0,3) 이렇게 하면 된다.
0번 인덱스는 A 를 가르키고 3번 인덱스는 D를 가르킨다.
고로 시작점에서 끝점까지 문자열을 가져오므로 ABCD 가 된다.

substr 은 substring 과 같이 문자열의 인덱스를 사용하는데 다른 점은 시작점에서 부터 몇개의 문자열을 가져올때 사용한다.

같은 예로 ABCDEF 를 substr(0,3)을 하면 0번 인덱스 A 에서 3개의 문자를 가져오므로 ABC가 된다.

실제예)
var string ="ABCDEF";
var ex1 = string.substring(0,3);   ===>ABCD
728x90

'개발및업무 > C#' 카테고리의 다른 글

dll 파일 생성 방법  (0) 2010.12.11
Windows Presentation Foundation 소개  (0) 2010.12.11
클래스와 멤버변수  (0) 2010.12.03
Math.Round 함수  (0) 2010.11.30
.NET Compiler  (0) 2010.08.10
728x90



아래 생성한 컬럼을 테이블 정의서 만들때 사용한다.

해당 내역을 조회해 오는 쿼리

프로시저로 생성해서 사용해도 된다.



   SELECT  DISTINCT A.ORDINAL_POSITION  AS SEQ 
      , A.TABLE_CATALOG    AS DB 
      , A.TABLE_SCHEMA    AS USERID 
      , A.TABLE_NAME     AS T_NM 
      , ''       AS T_KOR_NM
      , A.COLUMN_NAME    AS C_NM 
      , (SELECT  [Description] = ex.value 
       FROM  sys.columns c 
       LEFT OUTER JOIN  sys.extended_properties ex ON  (ex.major_id = c.object_id
                       AND ex.minor_id = c.column_id 
                       AND ex.name = 'MS_Description')
       WHERE  OBJECTPROPERTY(c.object_id, 'IsMsShipped')=0 
       AND OBJECT_NAME(c.object_id) = A.TABLE_NAME
       AND c.name = A.COLUMN_NAME) AS C_NM_KR  --> 2005이후 컬러명 조회 추후 테이블 깔끔하게 정리필요.
      , A.DATA_TYPE + CASE A.DATA_TYPE  
       WHEN 'varchar' THEN  ' ('+LTRIM(STR(CHARACTER_MAXIMUM_LENGTH))+')'    
       WHEN 'int' THEN  ' ('+LTRIM(STR(numeric_precision))+')'    
       WHEN 'numeric' THEN  ' ('+LTRIM(STR(numeric_precision))+'.'+LTRIM(STR(NUMERIC_SCALE))+')'   
       WHEN 'decimal' THEN  ' ('+LTRIM(STR(numeric_precision))+'.'+LTRIM(STR(NUMERIC_SCALE))+')'    
       WHEN 'datetime' THEN  '' 
       WHEN 'image'    THEN ''  
            WHEN 'char' THEN  ' ('+LTRIM(STR(CHARACTER_MAXIMUM_LENGTH))+')'  
       END                               AS TYPE 
      , '' AS '사용여부'
      , ISNULL((SELECT 'PK'  
       FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE  
       WHERE COLUMN_NAME = A.COLUMN_NAME  
      AND TABLE_NAME = A.TABLE_NAME
      ), '')   AS C_KEY 
      , CASE A.IS_NULLABLE 
       WHEN 'NO' THEN 'NN' 
       WHEN 'YES' THEN '' 
      END     AS NN 
      , ISNULL(A.COLUMN_DEFAULT, '')  AS DFT 
      , ', ' + '@' + A.COLUMN_NAME + ' ' + A.DATA_TYPE + CASE A.DATA_TYPE WHEN 'varchar' THEN  '('+LTRIM(STR(CHARACTER_MAXIMUM_LENGTH))+')'
                           WHEN 'int' THEN  '('+LTRIM(STR(numeric_precision))+')'    
                           WHEN 'numeric' THEN  '('+LTRIM(STR(numeric_precision))+'.'+LTRIM(STR(NUMERIC_SCALE))+')'   
                           WHEN 'decimal' THEN  '('+LTRIM(STR(numeric_precision))+'.'+LTRIM(STR(NUMERIC_SCALE))+')'    
                           WHEN 'datetime' THEN  '' 
                           WHEN 'image'    THEN ''  
                                WHEN 'char' THEN  '('+LTRIM(STR(CHARACTER_MAXIMUM_LENGTH))+')'  
                           END AS ARG
      , ', ' + A.COLUMN_NAME   AS C_NM2
      , ', @' + A.COLUMN_NAME   AS C_NM3

    from information_schema.COLUMNS A , INFORMATION_SCHEMA.KEY_COLUMN_USAGE B 
    WHERE A.TABLE_NAME = '조회할테이블명'
    AND A.TABLE_NAME = B.TABLE_NAME 
    ORDER BY A.ORDINAL_POSITION 


728x90
728x90



SQL 테이블과 컬럼에 설명을 넣는 방법

sp_addextendedproperty 'MS_Description', '학적-학적마스터-재', 'user', 'univ', 'table', 'SEA010';
GO
sp_addextendedproperty 'User_Description', '사용', 'user', 'univ', 'table', 'SEA010';
GO
sp_addextendedproperty 'MS_Description', '학번', 'user', 'univ', 'table', 'SEA010','column', 'colreg_no';
GO

디스크립션 생성한 후 잘 못 된 컬럼을 수정하려고 찾아보다 아래 내역을 찾았다.




* 테이블을 만들고 Description을 달고 싶은 경우 *

 
1. 주석추가 (add)


//테이블


EXEC   sp_addextendedproperty 'MS_Description', '테이블설명', 'user', dbo, 'table',테이블명

//컬럼들

EXEC   sp_addextendedproperty 'MS_Description', '컬럼설명', 'user', dbo, 'table', 테이블명, 'column', 컬럼명

 

2. 주석수정 (update)

//테이블

EXEC   sp_updateextendedproperty 'MS_Description', '테이블설명', 'user', dbo, 'table',테이블명

//컬럼들

EXEC   sp_updateextendedproperty 'MS_Description', '컬럼설명', 'user', dbo, 'table', 테이블명, 'column', 컬럼명


[출처] MSSQL Description 설정|작성자 무한미소

디스크립션 생성 참고 : http://msdn.microsoft.com/ko-kr/library/ms180047.aspx

디스크립션 수정 참고 : http://msdn.microsoft.com/ko-kr/library/ms186885.aspx

디스크립션 드롭 참고 : http://msdn.microsoft.com/ko-kr/library/ms178595.aspx





728x90

+ Recent posts