728x90

SELECT 금액 1 / 금액 2 AS 값 

이런식으로 쿼리를 작성했을 때 

메시지 8134, 수준 16, 상태 1, 줄 1

0으로 나누기 오류가 발생했습니다.

위와같은경우 실행금액이 0일때 오류가 발생합니다.

이런 오류가 발생할 수 있다.

SELECT CASE WHEN ISNULL(금액1,0) = 0 THEN 0

ELSE 금액2 / 금액1 END 값

위처럼 할 수도 있지만,

SET ANSI_WARNINGS OFF

SET ARITHIGNORE ON

SET ARITHABORT OFF

위와같이 선언하면 오류값이 null값으로 반환됨

반응형
728x90
반응형
728x90

프로젝트를 진행하다보니

프로시저 내에서 씨리얼하게 값을 증가시켜 데이터를 저장해야 하는일이 생겼다

프로시저내에서 전역변수를 선언할수는 없고

테이블을 하나 만들어서 컬럼을 identity 열로 지정하여 가져올까도 했지만 Transaction 이 발생되서 ... GG

코딩상으로는 전역변수 int 하나 만들어놓고 ++ 시키면 되는데

SQL 은 그런 기능이 없나 하다가 찾게된 기능

코딩상에서 전역변수를 사용하는것과 비슷하다.

 

시퀀스 하나 만들고 (SQL 2012 에서만 지원된다.)

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

CREATE SEQUENCE TESTIDX AS INT
START WITH 1 -- 시작수
INCREMENT BY 1 -- 증가수

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

 

프로시저내에서 아래와 같이 활용하면 된다.

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

NEXT VALUE FOR TESTIDX

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

 

SEQUENCE 는 지정숫자부터 증가하게하거나 초기화 및 띄어넘기가 가능하다

반응형
728x90

MS_SQL 교육용으로 사용 시 

DB 작업 스케줄을 걸수 없는 상태에서 사용하는 SP_RUN

SP_RUN_실행파일.zip
1.98MB

반응형
728x90


[MSSQL 참조키(Foreign Key) 설정하기]

참조키(외래키)는 데이타의 참조 무결성을 유지하기 위한 필수 조건으로 아래와 같은 특성을 가집니다.

[ 참조키의 특성 ]


1. 참조되는 테이블의 PRIMARY KEY나 UNIQUE 제약 또는 UNIQUE INDEX가 지정된 컬럼만을 참조할 수 있습니다. 
2. 참조키를 만들어도 자동적으로 색인이 만들어 지지 않습니다. 색인이 필요하면 직접만들어 써야  
   하며, 조인에 참여하는 참조키는 쿼리 속도를 고려한다면 색인을 만들어 두는것이 좋습니다. 
3. 참조키는 참조되는 테이블의 여러 컬럼을 참조할 수 있습니다. 간단히 말하면 참조되는 테이블에서 여러 컬럼이 
   모인 복합키(COMPOSITE KEY)가 사용되고 이를 참조한다면 너무나 당연한 것이겠죠?  
4. 참조키가 설정되면 실수로 데이타를 삭제하거나 변경하는 것을 방지할 수 있습니다. 
참조키를 정의하는 기본형식은 아래와 같습니다. 
[CONSTRAINT constraint_name] 
    [FOREIGN KEY] [(column[,...n])] 
    REFERENCES ref_table [(ref_column[,...n])] 
    [ON DELETE { CASCADE | NO ACTION } ] 
    [ON UPDATE { CASCADE | NO ACTION } ] 

constraint_name : 제약조건의 이름으로 데이타베이스 내에서 유일해야 합니다.

ref_table           : 참조되는 테이블 이름입니다.

ref_column        : 참조되는 컬럼또는 컬럼들입니다.

NO ACTION       : 참조되는 테이블의 행이 삭제 또는 수정되었을 경우 SQLServer에서는 오류 메시지를 띄우고, 

                        해당 작업은 롤백(RollBack)됩니다.


CASCADE           : 참조되는 테이블의 행이 삭제 또는 수정되었을 경우 이를 참조하는 테이블에서 

                         자동으로 변경되도록 설정하는 옵션입니다. 옵션을 지정하지 않으면 디폴트는 NO ACTION 입니다.

반응형
728x90

MSSQL 날짜 구하는 방법

아 ..ㅋㅋ이것도 필요 이거는 조회 및 날짜에 대한 계산을 사용할때 필요한 쿼리 

나는 이런것으로 돈을 번다.ㅋㅋㅋ

/*************************************************************

1. 테이블을 생성하면서 테이블의 데이타 복사
select * into 생성될테이블명 from 원본테이블명

/*************************************************************

2. 테이블 구조만 복사하겠다면
select * into 생성될테이블명 from 원본테이블명 where 1=2 /*************************************************************

3. 테이블이 이미 생성되어 있는경우 데이타만 복사
insert into 카피될테이블명 select * from 원본테이블명
/*************************************************************

4.특정 데이타만 복사 하겠다면
insert into 카피될테이블명 select * from 원본테이블명 where 검색조건
/*************************************************************

5.다른 테이블조인해서 UPDATE 하기
UPDATE 엡데이트 테이블 명
SET 업테이트할 컬럼 = 업데이트 가져오는 컬럼
FROM 엡데이트 테이블 명 A, 다른테이블 명 B 
WHERE 조인조건

/**************************************************************


6. 프로시저 검색 
SELECT * FROM INFORMATION_SCHEMA.ROUTINES

/*************************************************************

반응형
728x90

MSSQL 날짜 구하는 방법

아 ..ㅋㅋ이것도 필요 이거는 조회 및 날짜에 대한 계산을 사용할때 필요한 쿼리 

나는 이런것으로 돈을 번다.ㅋㅋㅋ

/*****************************************************************************************************/

SELECT convert(varchar(8),DATEADD(day, 0,DATEADD(MONTH, -1,DATENAME(YEAR,getdate()) + DATENAME(month,getdate())+'01')),112)  /*이전달 첫일*/
    ,  convert(varchar(8),DATEADD(day, -1,DATEADD(MONTH, -0,DATENAME(YEAR,getdate()) + DATENAME(month,getdate())+'01')),112) /*이전달 말일 */
,  convert(varchar(8),DATEADD(day, 0,DATEADD(MONTH, -0,DATENAME(YEAR,getdate()) + DATENAME(month,getdate())+'01')),112)  /*당월 첫일*/
,  convert(varchar(8),getdate(),112) /*해당일*/
,  convert(varchar(8),DATEADD(day,-1,getdate()),112) /*해당일 -1일*/
,  convert(varchar(8),DATEADD(MONTH, -3,getdate()),112)  /*당월 -3개월*/

/*****************************************************************************************************/

반응형
728x90

MSSQL 디스크립션 조회 상세 버전 

아 ..ㅋㅋ이것도 필요 이거는 테이블의 속성에 대한 설명이 있는내용

여러가지 많이 필요하다 먼가를 하기 위한 작업이 다른 사람이 만들어 놓은 자료를 가지고 분석하고 

나만의 것으로 만들기에는 노력이 필요한듯

/*****************************************************************************************************/

SELECT 
A.TABLE_NAME, 
C.VALUE AS TABLE_COMMENT,
A.COLUMN_NAME, A.DATA_TYPE, 
ISNULL(
CAST(A.CHARACTER_MAXIMUM_LENGTH AS VARCHAR),  
CAST(A.NUMERIC_PRECISION AS VARCHAR) + ',' +
CAST(A.NUMERIC_SCALE AS VARCHAR)
) AS COLUMN_LENGTH,
A.COLUMN_DEFAULT, A.IS_NULLABLE,
B.VALUE AS COLUM_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS A 
LEFT OUTER JOIN SYS.EXTENDED_PROPERTIES B ON B.major_id = object_id(A.TABLE_NAME) 
AND A.ORDINAL_POSITION = B.minor_id
LEFT OUTER JOIN 
(
SELECT object_id(objname) AS TABLE_ID, VALUE
FROM ::FN_LISTEXTENDEDPROPERTY(NULL, 'User','dbo','table',NULL, NULL, NULL)
) C ON object_id(A.TABLE_NAME) = C.TABLE_ID
WHERE A.TABLE_NAME IN (
/* 여기에 테이블명 입력 */
)
ORDER BY A.TABLE_NAME, A.ORDINAL_POSITION

/*****************************************************************************************************/

반응형

+ Recent posts