SQL Server 2005 TSQL

TOP (<식>)
- TOP 에 변수 사용 가능
- 구문
TOP (expression) [PERCENT]
[WITH TIES]



Common Table Expression
- 명명된 테이블 식
- 구문:
WITH ( )
AS ( )

- WITH 절은 다은에 이어지는 SELECT/INSERT/DELETE/UPDATE 구문과 한 문장임
- 단일 WITH 절에서 다중의 CTE를 하나의 T-SQL 문에 정의 가능함.
- 두 가지 유형
재귀 CTE: 쿼리에서 재귀호출이 가능하도록 해 줌
비재귀 CTE: 파생된 테이블과 뷰의 특성이 혼합된 기능임.

- 가 자신을 참조 -> 재귀
- CTE의 재귀형식
<비재귀 SELECT>
union all

- 두번째 SELECT문의 결과가 없을 때 재귀 호출이 중단됨


오류처리
@@ERROR
- 전역변수
- 마지막으로 실행된 T-SQL 문의 오류번홀르 반환함
- T-SQL 문이 성공적으로 실행된 경우 -> @@ERROR = 0
- T-SQL 문이 실행될 때마다 새로운 값이 설정됨
- 제약 사항
SQL문 다음에 매번 @@ERROR 값을 검사해야함
GOTO 문과 Label 을 사용하기 때문에 중앙 집중화된 오류처리를 구현하게 됨
트랜잭션 또는 일괄처리를 중단시키는 오류의 경우에는 오루 처리가 되지 않음.
자세한 오류 정보가 제공되지 않음.

TRY ~ CATCH
- TRY 블록 영역
begin try ~ end try 사이에 있는 코드
- CATCH 블록영역
begin catch ~ end catch 사이에 있는 코드
- TRY 블록영역 내에서 오류가 발생
실행이 관련 CATCH블록으로 이동함
- TRY...CATCH 구조는 중첩 가능함
- CATCH 블록영역 내에서 오류가 발생
중첩 try...catch 구조의 경우에는 가장 가까운 catch 블록으로 이동함
중첩 구조가 아닌 경우에는 호출자에게 오류가 반환됨
- TRY...CATCH가 포착 가능한 오류
@@ERROR 값 설정이 발생하는 모든 런타임 오류

- CATCH 블록영역에서 사용 가능한 함수
error_number() - 오류번호
error_message() - 오류 메시지
error_severity() - 오류 심각도
error_state() - 오류 상태 번호
error_line() - 오류를 발생시킨 줄 번호
error_procedure() - 오류가 발생한 저장 프로시저 또는 트리거의 이름
- CATCH 블록영역의 외부에서 실행하면 NULL이 반환됨.

TRY...CATCH가 처리할 수 없는 오류
- 경고메시지 및 정보 제공 메시지
- 데이터베이스 연결을 끊는 오류
- Attentions ( 클라이언트 인터럽트 요청 또는 손상된 클라이언트 연결 )
- KILL 문
- 컴파일 및 SQL 문 차원의 재컴파일 오류

예 :
-- 일반 select
USE AdventureWorks;
GO

BEGIN TRY
-- Table does not exist; object name resolution
-- error not caught.
SELECT * FROM NonexistentTable;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
END CATCH

-- 프로시저에서 사용

-- Verify that the stored procedure does not exist.
IF OBJECT_ID ( N'usp_ExampleProc', N'P' ) IS NOT NULL
DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that will cause an
-- object resolution error.
CREATE PROCEDURE usp_ExampleProc
AS
SELECT * FROM NonexistentTable;
GO

BEGIN TRY
EXECUTE usp_ExampleProc
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
END CATCH;





커밋 불가 트랜잭션
- TRY 블록 내에서의 트랜잭션 중단 오류
- 커밋불가 트랜잭션
커밋될 수 없는 모든 활성 트랜잭션
커밋 불가 트랜잭션에서는 오직 읽기 또는 ROLLBACK TRANSACTION만 실행가능
- 쓰기 작업 또는 COMMIT TRANSACTION은 실행 불가

트랜잭션 상태 조회
XACT_STATE()
- 트랜잭션의 상탤르 반환함
- 1 = 활성상태의 커밋 가능한 트랜잭션
- 0 = 비활성 트랜잭션
- -1 = 활성 상태의 커밋 불가한 트랜잭션



예외처리 - RAISERROR
- RAISERROR : 오류를 발생시키는데 사용됨
- RAISERROR 는 TRY 또는 CATCH 블록에서 사용함
- TRY 블록에서 RAISERROR 를 사용
심각도 11-19 인 RAISERROR 가 실행되면 CATCH 블록으로 이동함
- CATCH 블록에서 RAISERROR를 사용
RAISERROR 를 사용하여 오류를 호출자에게 반환함

오류처리 가이드
- TRY...CATCH 구조를 사용하여 오류 처리 로직을 구현할 것을 권고함
- 기존의 @@ERROR 기반의 오류처리코드를 TRY...CATCH로 대체할 것을 권고함
- 오류정보를 기록할 것을 권고함
문제점을 진단하기 위해서는 오류정보가 필요함
심각한 오류는 테이블에 기록을 남길 것을 권고함
- CATCH 블록 코드를 테스트할 것을 권고함

RANKING 함수
- RANK()
결과 집합의 각 행에 대하여 지정된 파티션 내에서 정렬기준에 의거하여 등급을 부여하는 함수
- DENSE_RANK()
결과집합의 각 행에 대하여 지정된 파티션 내에서 정렬 기준에 의거하여 연속적인 등급을 반환하는 함수
- NTILE()
결과 집합의 각 파티션에 잇는 행들을 지정한 개수만큼의 그룹으로 쪼개어 등급을 부여하는 함수
- ROW_NUMBER()
결과 집합의 각 행에 대하여 행의 우치 번호를 반환하는 함수

- 집계 작업에 사용 가능
- 사용자 정의 함수와 함께 사용 가능

예:
SELECT
RANK() OVER(ORDER BY CITY) AS RANK,
RANK() OVER(PARTITION BY CITY ORDER BY LASTNAME) AS PART_RANK,
DENSE_RANK() OVER(ORDER BY CITY) AS DENSE_RANK,
ROW_NUMBER() OVER(ORDER BY CITY) AS ROW_NUM,
NTILE(4) OVER(ORDER BY CITY) AS NTILE_4,
LASTNAME,
FIRSTNAME,
CITY
FROM EMPLOYEES
ORDER BY CITY, LASTNAME

- OVER 절
파티션 방식 제공
결과 집합의 행들을 정렬

페이징
예: 50에서 60까지의 주문 정보를 일자순으로 정렬
WITH OrderedOrders AS
(select SalesOrderID, OrderDate, Row_Number() OVER(order by OrderDate) as RN from SalesOrderHeader)
select * from OrderedOrders WHERE RN between 50 and 60

PIVOT

UNPIVOT

APPLY

OUTPUT
- DML 연산의 일부로서, 행을 반환하는 기능임
- 작업의 결과를 확인 가능함
"Inserted" 와 "Deleted" 를 사용하여 업데이트 전후의 데이터를 확인 가능함.
- 결과 행을 테이블 또는 변수에 저장 가능함
OUTPUT...INTO...
- 예:
USE AdventureWords;
GO
DELETE SalesShoppingCartItem OUTPUT DELETED.*;
SELECT COUNT(*) AS [Rows in Table] FROM SalesShoppingCartItem;
GO

EXCEPT 와 INTERSECT
- 두 개의 서로 다른 행 집합들을 기반으로 결과 집합을 제공하는 집합 연산자임.
- EXCEPT
첫 번째 결과 집합에는 존재하고 두번째 결과 집합에는 존재하지 않는 행들의 집합을 반환함.
- INTERSECT
양쪽 집합에 모두 존재하는 행들의 집합을 반환함.
- 전제 조건
모든 쿼리의 컬럼들의 수와 순서가 동일해야 함.
데이터 타입이 호환되어야 함
- 예 :
SELECT * FROM TABLEA EXCEPT SELECT * FROM TABLEB;
SELECT * FROM TABLEA INTERSECT SELECT * FROM TABLEB;



UNION, EXCEPT, INTERSECT 다른 T-SQL 문과 연계 사용 시 가이드
- INTO 절을 사용하여 최종 결과 집합을 테이블에 저장하고자 하는 경우에는 첫 번째 쿼리에만 INTO를 기술함.
- ORDER BY 는 SQL문의 마지막 부분에 기술함.
- GROUP BY 와 HAVING 절은 개별 쿼리에만 사용가능하며, 최종 결과 집합에는 영향을 미치지 않음.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/09/06 12:53 2007/09/06 12:53
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2649

Web 2.0이란 무엇인가 : 다음 세대 소프트웨어를 위한 디자인 패턴 및 비즈니스 모델

Web 2.0이란 무엇인가 : 다음 세대 소프트웨어를 위한 디자인 패턴 및 비즈니스 모델(1)

Web 2.0이란 무엇인가 : 다음 세대 소프트웨어를 위한 디자인 패턴 및 비즈니스 모델(2)

Web 2.0이란 무엇인가 : 다음 세대 소프트웨어를 위한 디자인 패턴 및 비즈니스 모델(3-완결)
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/09/05 19:06 2007/09/05 19:06
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2647

CONVERT()

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/09/03 11:26 2007/09/03 11:26
Response
No Trackback , a comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2638

랜덤하게 값을 불러올때 - NEWID()

uniqueidentifier 형식의 고유 값을 만듭니다.

Transact-SQL 구문 표기 규칙

구문

NEWID ( )


반환 형식
uniqueidentifier


1. 변수가 있는 NEWID 함수 사용
다음 예에서는 NEWID()를 사용하여 uniqueidentifier 데이터 형식으로 선언된 변수에 값을 할당합니다. uniqueidentifier 데이터 형식 변수의 값은 테스트하기 전에 인쇄됩니다.

코드 복사
-- Creating a local variable with DECLARE/SET syntax.
DECLARE @myid uniqueidentifier
SET @myid = NEWID()
PRINT 'Value of @myid is: '+ CONVERT(varchar(255), @myid)


결과 집합은 다음과 같습니다.

코드 복사
Value of @myid is: 6F9619FF-8B86-D011-B42D-00C04FC964FF

참고:
NEWID에서 반환된 값은 컴퓨터마다 다릅니다. 설명을 돕기 위해 이 숫자가 표시됩니다.



2. CREATE TABLE 문에서 NEWID 사용
다음 예에서는 uniqueidentifier 데이터 형식으로 cust 테이블을 만들고 NEWID를 사용하여 테이블을 기본값으로 채웁니다. NEWID()의 기본값을 할당할 때 새 행과 기존 행마다 CustomerID 열에 고유 값이 있습니다.

코드 복사
-- Creating a table using NEWID for uniqueidentifier data type.
CREATE TABLE cust
(
CustomerID uniqueidentifier NOT NULL
DEFAULT newid(),
Company varchar(30) NOT NULL,
ContactName varchar(60) NOT NULL,
Address varchar(30) NOT NULL,
City varchar(30) NOT NULL,
StateProvince varchar(10) NULL,
PostalCode varchar(10) NOT NULL,
CountryRegion varchar(20) NOT NULL,
Telephone varchar(15) NOT NULL,
Fax varchar(15) NULL
)
GO
-- Inserting data into cust table.
INSERT cust
(CustomerID, Company, ContactName, Address, City, StateProvince,
PostalCode, CountryRegion, Telephone, Fax)
VALUES
(NEWID(), 'Wartian Herkku', 'Pirkko Koskitalo', 'Torikatu 38', 'Oulu', NULL,
'90110', 'Finland', '981-443655', '981-443655')
INSERT cust
(CustomerID, Company, ContactName, Address, City, StateProvince,
PostalCode, CountryRegion, Telephone, Fax)
VALUES
(NEWID(), 'Wellington Importadora', 'Paula Parente', 'Rua do Mercado, 12', 'Resende', 'SP',
'08737-363', 'Brasil', '(14) 555-8122', '')
INSERT cust
(CustomerID, Company, ContactName, Address, City, StateProvince,
PostalCode, CountryRegion, Telephone, Fax)
VALUES
(NEWID(), 'Cactus Comidas para Ilevar', 'Patricio Simpson', 'Cerrito 333', 'Buenos Aires', NULL,
'1010', 'Argentina', '(1) 135-5555', '(1) 135-4892')
INSERT cust
(CustomerID, Company, ContactName, Address, City, StateProvince,
PostalCode, CountryRegion, Telephone, Fax)
VALUES
(NEWID(), 'Ernst Handel', 'Roland Mendel', 'Kirchgasse 6', 'Graz', NULL,
'8010', 'Austria', '7675-3425', '7675-3426')
INSERT cust
(CustomerID, Company, ContactName, Address, City, StateProvince,
PostalCode, CountryRegion, Telephone, Fax)
VALUES
(NEWID(), 'Maison Dewey', 'Catherine Dewey', 'Rue Joseph-Bens 532', 'Bruxelles', NULL,
'B-1180', 'Belgium', '(02) 201 24 67', '(02) 201 24 68')
GO


3. uniqueidentifier 및 변수 할당 사용
다음 예에서는 @myid라는 로컬 변수를 uniqueidentifier 데이터 형식의 변수로 선언합니다. 그런 다음 SET 문을 사용하여 변수에 값을 할당합니다.

코드 복사
DECLARE @myid uniqueidentifier
SET @myid = 'A972C577-DFB0-064E-1189-0154C99310DAAC12'
GO


참고 항목
참조
NEWSEQUENTIALID()
ALTER TABLE(Transact-SQL)
CAST 및 CONVERT(Transact-SQL)
CREATE TABLE(Transact-SQL)
데이터 형식(Transact-SQL)
시스템 함수(Transact-SQL)
uniqueidentifier(Transact-SQL)
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/08/24 10:09 2007/08/24 10:09
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2624

원격접속

실행에서 mstsc /console
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/08/23 15:14 2007/08/23 15:14
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2621

StarUML 5.0 사용자 가이드

StarUML - 오픈소스 UML/MDA 플랫폼
StarUML은 빠르고, 유연하고, 확장가능하며, 풍부한 기능에 Win32 플랫폼에서 무료로 사용할 수 있는 UML/MDA 플랫폼(툴)을 개발하기 위한 오픈 소스 프로젝트입니다. StarUML 프로젝트의 목적은 Rational Rose, Together와 같은 상업적 도구를 비싼 돈을 들여 사용하지 않더라도 그에 준하는 기능을 갖춘 오픈 소스 소프트웨어 모델링 도구 및 플랫폼을 개발하는 것입니다. 상세히 알기...

StarUML에 관하여

StarUML은 빠르고, 유연하고, 확장가능하며, 풍부한 기능에 Win32 플랫폼에서 무료로 사용할 수 있는 UML/MDA 플랫폼(툴)을 개발하기 위한 오픈 소스 프로젝트입니다. StarUML 프로젝트의 목적은 Rational Rose, Together와 같은 상업적 도구를 비싼 돈을 들여 사용하지 않더라도 그에 준하는 기능을 갖춘 오픈 소스 소프트웨어 모델링 도구 및 플랫폼을 개발하는 것입니다.

  • UML 2.0 : UML 은 OMG(Object Management Group)가 지속적으로 관리하는 통합 표준입니다. 최근에 UML 2.0이 릴리즈 되었으며 StarUML은 UML 2.0 을 지원하며 최신 UML 표준을 지원하고 있습니다.
  • MDA (Model Driven Architecture) : MDA는 OMG가 도입한 새로운 기술입니다. MDA의 장점을 얻기 위해서는 소프트웨어 모델링 툴은 많은 커스터마이징 요소들을 지원해야만 합니다. StarUML은 MDA를 지원할 수 있도록 설계되었고 UML 프로파일, 접근법, 모델 프레임워크, 표기법 확장, MDA 코드 및 문서 템플릿 등 수많은 커스터마이징 요소들을 제공합니다. 이러한 것들은 여러분의 조직문화, 프로세스 및 프로젝트에 툴을 맞출 수 있도록 도와줍니다.
  • 플러그-인 아키텍처 : 많은 사용자들이 소프트웨어 모델링툴에 더 많은 기능을 요구합니다. 이러한 요구사항에 부합하기 위해, 툴은 플래폼에 매우 잘 정의된 플러그를 가져야만 합니다. StarUML 은 누구든지 COM과 호환가능한 언어(C++, Delphi, C#, VB 등)에서 플러그인 모듈을 개발할 수 있게 단순하며 강력한 플러그인 아키텍쳐를 제공합니다.
  • 사용성 : 사용성은 소프트웨어 개발의 가장 중요한 사항입니다. StarUML은 퀵 다이얼로그, 키보드 조작, 다이어그램 오버뷰 등과 같이 많은 사용자들에게 친숙한 특징을 제공할 수 있도록 적용되었습니다.

    StarUML 5.0 사용자 가이드

    http://staruml.sourceforge.net/docs/user-guide(ko)/toc.html
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/08/11 14:53 2007/08/11 14:53
, , ,
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2597

SET STATISTICS TIME(Transact-SQL)

구문

SET STATISTICS TIME { ON | OFF }

주의
SET STATISTICS TIME 옵션을 ON으로 설정하면 문에 대한 시간 통계가 표시됩니다. OFF로 설정하면 시간 통계가 표시되지 않습니다.

SET STATISTICS TIME 옵션은 실행 시간 또는 런타임에 설정되며, 구문 분석 시에는 설정되지 않습니다.

ightweight pooling 구성 옵션을 설정하면 활성화되는 파이버 모드에서는 Microsoft SQL Server 가 정확한 통계를 제공할 수 없습니다.

SET STATISTICS TIME을 ON으로 설정해 쿼리를 실행하면 sysprocesses 테이블의 cpu 열만 업데이트됩니다. SET STATISTICS TIME이 OFF인 경우에는 0이 반환됩니다.

ON과 OFF 설정은 SQL Server Management Studio 의 Process Info View for Current Activity에 있는 CPU 열에도 영향을 줍니다.

USE AdventureWorks;
GO
SET STATISTICS TIME ON
GO
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/08/08 10:33 2007/08/08 10:33
Response
No Trackback , 2 Comments
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2591

임시테이블 & 레코드수 채우기

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



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



CREATE PROC [dbo].[up_main_update]

AS
SET NOCOUNT ON

declare @totalcount int, @chk_num int

CREATE TABLE #Notice(
[idx] [int] IDENTITY(1,1) NOT NULL,
[Gubun] [nvarchar] (10) NULL,
[seq] [int] NULL,
[Title] [nvarchar](50) COLLATE Korean_Wansung_CI_AS NULL,
[RegDate] [nvarchar] (10) NULL

)



insert into #Notice select gubun, seq, title, regdate from
(
select top 3 'notice' as 'gubun', seq,title,right(replace(convert(varchar(10),regdate,111),'/','.'),8) as 'regdate'
from notice where seq in (select top 5 seq from notice where status = '1' and len(title) > 0 order by rank desc,seq desc )
union
select top 2 'event' as 'gubun', seq,title,right(replace(convert(varchar(10),regdate,111),'/','.'),8) as 'regdate'
from event where seq in (select top 5 seq from event where status = '1' and len(title) > 0 order by seq desc )
) as a order by regdate desc

set @totalcount = @@rowcount
set @chk_num = 0
while(@totalcount < 5)
begin
if(@chk_num = 0 and @totalcount = 0 )
begin
--insert into #Notice select 'notice' as 'gubun', '0','등록된 자료가 없습니다.',right(replace(convert(varchar(10),getdate(),111),'/','.'),8) as 'regdate'
insert into #Notice select 'notice' as 'gubun', '0','undefined', 'undefined' as 'regdate'
end
else
begin
-- insert into #Notice select 'notice' as 'gubun', '0','undefined',right(replace(convert(varchar(10),getdate(),111),'/','.'),8) as 'regdate'
insert into #Notice select 'notice' as 'gubun', '0','undefined', 'undefined' as 'regdate'
end

print @totalcount

set @totalcount = @totalcount + 1
set @chk_num = @chk_num + 1
end




select * from #Notice order by idx

drop table #Notice

--------------------------------------------------------
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/08/01 17:25 2007/08/01 17:25
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2578

임시테이블 생성/사용

-- 임시 테이블 생성
CREATE TABLE #SETTLE_DAILY (
TARGET_DATE VARCHAR(10) NOT NULL ,
TOT_CNT INT DEFAULT NULL ,
TOT_PRECNT INT DEFAULT NULL ,
TOT_GOCNT INT DEFAULT NULL ,
TOT_PRICE INT DEFAULT NULL ,
TOT_PREPRICE INT DEFAULT NULL ,
TOT_GOPRICE INT DEFAULT NULL
)
CREATE TABLE #SETTLE_CHK (
TARGET_DATE VARCHAR(10) NOT NULL
)


-- 임시 테이블 삭제
DROP TABLE #SETTLE_DAILY
DROP TABLE #SETTLE_CHK
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/08/01 17:17 2007/08/01 17:17
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2577

성능테스트 - JMeter

성능테스트 툴 - JMeter


다운로드 : http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi

Manual : JMeter Manual



참고 : http://wiki.javajigi.net/display/IDE/JMeter

JUnit - http://junit.org/
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/08/01 14:34 2007/08/01 14:34
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2576

« Previous : 1 : ... 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : ... 101 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/11   »
          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
Statistics Graph

Site Stats

Total hits:
240613
Today:
409
Yesterday:
856