반응형

 

MS-SQL 예외처리 방법을 알아보자.

MSSQL에서 예외처리를 하고 싶을때 주로 exists 구문을 사용한다.

 

예를 들어서 Table1과 Table2의 데이터 중에서 한쪽에 없는것만 확인 하고 싶을때,

두 테이블의 여집합을 구하고 싶을때 사용한다.

 

1. Table Name : TEST01

Column : A, B, C, D

 

2. Table Name : TEST02

Column : C, D, E, F

 

 

ex)

INSERT INTO TEST01 ( A, B, C, D ) VALUES ( 'A1', 'B1', 'C1', 'D1' )
INSERT INTO TEST01 ( A, B, C, D ) VALUES ( 'A2', 'B2', 'C2', 'D2' )
INSERT INTO TEST01 ( A, B, C, D ) VALUES ( 'A3', 'B3', 'C3', 'D3' )
INSERT INTO TEST01 ( A, B, C, D ) VALUES ( 'A4', 'B4', 'C4', 'D4' )

INSERT INTO TEST02 ( C, D, E, F ) VALUES ( 'C1', 'D1', 'E1', 'F1' )
INSERT INTO TEST02 ( C, D, E, F ) VALUES ( 'C2', 'D2', 'E2', 'F2' )
INSERT INTO TEST02 ( C, D, E, F ) VALUES ( 'C3', 'D3', 'E3', 'F3' )
INSERT INTO TEST02 ( C, D, E, F ) VALUES ( 'C4', 'D4', 'E4', 'F4' )
INSERT INTO TEST02 ( C, D, E, F ) VALUES ( 'C5', 'D5', 'E5', 'F5' )

 

 

예외처리 구문

 

위에서 보는거와 같이

TEST02를 조회하면서 TEST01에 있는 데이터는 조회하지 않는 코드를 구현했다.

 

밑에 소스코드 부분을 작성해 두었으니 복사해서 참고하길 바란다.

select *
from TEST02
where 1=1
and not exists  (select null from TEST01 where TEST01.C = TEST02.C)

select *
from TEST02 T2
where 1=1
and not exists  (select null from TEST01 T1 where T1.C = T2.C)

반응형
반응형

# MSSQL 날짜 더하기, 시간 더하기 / MSSQL 날짜 빼기, 시간 빼기 / MSSQL 날짜 및 시간 계산하기

DATEADD 는 MSSQL에서 날짜 형식(DATETIME)의 값을 계산할때 사용합니다.

년    /    year (yy)

월    /    month (mm)

일    /    day (dd)

시    /    hour (hh)

분    /    minute (mi)

초    /    second (ss)

Ex 1. select getdate() as '현재시간', dateadd( mi, 10, getdate() ) as '10분더한시간' 

Value 1. 현재시간(2017-03-31 12:21:58.923), 10분더한시간(2017-03-31 12:31:58.923)

 

Ex 2. 아래와 같이 현재시간 또는 임의의 시간에서 시간을 더하거나 뺄수가 있다.

Value 2.

반응형
반응형

MS-SQL 을 사용해서 프로그램을 만들다 보면 어디에서 에러가 나는지 소스코드를 다 까볼수도 없고 답답할 때가 한두번이 아니에요.

그럴때 이용하기 편한게 SQL Server Profiler 프로파일러 입니다.

오늘은 SQL Server Profiler (SQL Server 프로파일러) 사용법에 대해서 알려드릴게요.

 

우선 아래 그림과 같이 클릭하면 서버를 선택 할 수가 있습니다.

 

서버를 선택 한 후에 TSQL만 빼고 다른건 클릭을 빼도 무방 합니다.

어차피 어떤 쿼리가 돌고 그 쿼리에서 에러가 어떻게 나는지 찾으려고 하는 거니까요.

 

그 다음 열필터를 누르고 HOST NAME 을 선택하면 유사라고 보이는 부분이 있습니다.

보이시죠?

 

유사에 본인 컴퓨터 이름을 입력하세요.

다른 사람이 돌리는 쿼리에 대한 걸 보고 싶다면 그 사람 PC 이름을 적어주면 됩니다.

그다음 확인을 누르고 실행을 눌러주세요.

 

PC 이름을 입력하는 이유는 프로그램을 사용하는 사람중에 내 PC에서만 동작하는 쿼리를 확인하기 위함입니다.

참고하세요.

프로그램을 실행한 후 보고자 하는 쿼리가 있는 화면이나 프로그램을 실행해 주세요.

그럼 아래와 같이 프로그램이 실행되면서 발생하는 쿼리나 그밖에 다른 구문들이 나옵니다.

그중에 선택해서 확인하면 위 그림과 같이 현재 프로그램에서 실행했던 쿼리나 프로시져 구문을 확인할 수 있습니다.

쿼리 또는 프로시저를 확인할때 편리합니다.

 

 

반응형
반응형

# MS-SQL [xp_dirtree]

MS-SQL에서 기본으로 재공해주는 폴더 검색 프러시저(procedure)다.

Database 가 있는 서버의 특정 폴더를 검색할때 유용하게 사용 할 수 있으며, 위 그림과 같이 검색 했을 경우 특정 경로의 폴더 안에 있는 파일들을 표시해 준다.

 

# MS-SQL [xp_cmdshell]

MS-SQL에서 기본으로 재공해주는 프러시저(procedure)로 일반 PC에서 쓰는 도스 명령어를 사용 할 수 있다.

위 사진은 특정 폴더의 파일을 다른 폴더로 복사하는 기능을 수행한다.

기본적으로 일반 PC 에서 실행창에 cmd 를 입력 하거나 [보조프로그램]에서 [명령 프롬프트]를 사용하면 아래와 같은 도스창을 활성화 시킬 수 있다.

도스 명령어도 진행 할 수 있는 모든 작업은 xp_cmdshell 로 할 수 있다.

그밖에 파일을 특정 폴더에서 특정 폴더로 이동하고자 할때는 MOVE 명령어를 사용하면 된다.

MOVE 명령어는 아래 그림을 참조하기 바란다.

도스 명령어를 활용해서 복사, 이동, 삭제등 보다 많은 작업을 수행 할 수 있다.

cmd 명령어 또는 도스명령어를 참고 하기 바란다.

반응형
반응형

# MS-SQL EXCEL파일 생성 및 DATABASE SERVER 에 DOWNLOAD 하기

USE [DATABASE]
GO
/****** Object:  StoredProcedure [dbo].[TEST_EXCEL]    Script Date: 02/02/2017 08:59:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROC [dbo].[TEST_EXCEL]

                                  
AS          
                                   
DECLARE @filename1 varchar(100)                             
       ,@allFile varchar(300)                             
       ,@sql varchar(8000)                                                            
       ,@QueryString varchar(8000)  
       ,@DATE VARCHAR(10)
                                          
SET @DATE = Substring(CONVERT(VARCHAR(10), GETDATE(), 121), 1, 4)
SET @DATE = @DATE + Substring(CONVERT(VARCHAR(10), GETDATE(), 121), 6, 2)
SET @DATE = @DATE + Substring(CONVERT(VARCHAR(10), GETDATE(), 121), 9, 2)

SET @filename1 = 'D:\'+@DATE + '.XLS'
                              
SET @allFile = @filename1

---------- query start ----------
SET @queryString = ''

SET @QueryString = @QueryString + ' select TEST1,'
SET @QueryString = @QueryString + '    TEST2'
SET @QueryString = @QueryString + ' from DATABASE.dbo.TEST_TABLE1'
---------- query END ----------

 

SET @sql='exec master..xp_cmdshell ''bcp "' + @queryString + '" queryout "'+@filename1+'" -c -t, -T -S -U [DATABASE ID] -P [DATABASE PASS]'''     

                  
select (@sql)
EXEC(@sql)

 

-- DATABASE : DATABASE 연결해 주는 부분       

-- query start : 쿼리 작성하는 부분

-- DATABASE ID : DATABASE ID

-- DATABASE PASS : DATABASE PASS

이부분은 변경을 해주셔야 합니다.

다른 부분은 그냥 사용하시면 문제 없을거라 판단됩니다.

소스를 취대한 줄여서 올렸습니다. 쿼리 부분만 수정하셔서 사용하시기 바랍니다.

 

 

반응형
반응형

# MS-SQL ERROR

해당 에러는 INSERT 되는 DATA의 문자열보다,

TABLE 컬럼의 사이즈가 적어서 발생하는 것입니다.

 

- 해결방법

쿼리문을 확인한 다음 해당 컬럼의 사이즈를 늘려주면 됩니다.

어떤 컬럼인지 확인하는 방법은 없는것 같습니다.

 

EXEC sp_help [테이블명]

실행하면 하면 테이블 정보가 나옵니다.

비교하면서 확인하시기 바랍니다.

 

 

반응형

+ Recent posts