2010년 4월 28일 수요일

각종 페이징 처리

Alter Procedure dbo.ListDotNetNote

@Page Int,

@Category VarChar(10)

As

Select Top 10 *

From DotNetNote

Where

Category = @Category

And

Num Not In

(

Select Top (10 * @Page) Num

From DotNetNote

Where Category = @Category

Order By Ref Desc, RefOrder Asc

)

Order By Ref Desc, RefOrder Asc

Go

Select Top 코드와 Not In코드가 이 코드문에서 핵심키가되는 코드입니다.
Select Top 10 * 코드는 이하 코드의 조건을 맞춰서 찾아온 정보들중에서 상위10개만 선택하겠다는 의미입니다.
물론 10을 원하는 숫자로 바꾸면 원하는 만큼만 가져올수 있습니다.
Not in 코드는 이하 가로안의 정보를 가져와서 전체DB에서 가로안의 정보만을 배제하고나서 처리하겠다는 의미입니다.

2010년 4월 18일 일요일

Minus Query

SELECT *
FROM (SELECT *
FROM 원본테이블명 a with (nolock)
) a
WHERE NOT EXISTS (SELECT emp_no
FROM (SELECT b.emp_no
FROM 비교대상테이블명 b with (nolock)
) b
WHERE a.emp_no = b.emp_no)

원본테이블에 데이터 추가시 비교대상테이블과 비교하여 추가된 데이터만 확인이 가능하다.

2010년 4월 17일 토요일

CTE(공통 테이블)

CTE(공통 테이블 식)라고도 하는 임시로 이름이 지정된 결과 집합을 지정합니다. CTE는 단순 쿼리에서 파생되며 SELECT, INSERT, UPDATE 또는 DELETE 문의 실행 범위 내에서 정의됩니다. 이 절은 정의하는 SELECT 문의 일부로 CREATE VIEW 문 내에서도 사용할 수 있습니다. 공통 테이블 식은 자신에 대한 참조를 포함할 수 있으며 이를 재귀 공통 테이블 식이라 합니다.
이것은 CTE가 임시로 이름이 지정된 결과집합을 저장하는 공통테이블식과 자기 자신에 대한 참조를
포함하여 저장하는 재귀공통테이블식이 있다는 것입니다.

구문

[ WITH [ ,...n ] ]

::=
expression_name [ ( column_name [ ,...n ] ) ]
AS
( CTE_query_definition )

<레이블> ::=
구문 블록의 이름입니다. 이 규칙은 문에서 한 번 이상 사용될 수 있는 긴 구문의 섹션 또는 구문 단위를 그룹화하고 레이블을 붙일 때 사용됩니다. 구문 블록이 사용될 수 있는 위치는 <레이블>과 같은 모양의 레이블로 표시됩니다.

[ WITH [ ,...n ] ] -> expression_name [ ( column_name [ ,...n ] ) ]

2010년 4월 14일 수요일

SELECT INTO

1. SELECT * INTO : 신규테이블 생성하면서 조회한 자료를 넣음

<전체컬럼>

BEGIN TRAN

SELECT * INTO 신규테이블명 FROM 조회테이블명 with(nolock)
WHERE SALE_YMD between '20080101' AND '20090731'

-- ROLLBACK COMMIT

<일부컬럼>

BEGIN TRAN

SELECT * INTO 신규테이블명 FROM

( SELECT AAA, BBB FROM 조회테이블명 with(nolock)
WHERE SALE_YMD between '20080101'

AND '20090731'

) AS STABLE
COMMIT -- ROLLBACK

2.INSERT INTO : 똑같은 스키마를 가진 태이블이 이미 생성된 상태에서 자료를 인서트 함

<전체컬럼>

BEGIN TRAN

INSERT INOT 복사될테이블명 SELECT * FROM 복사대상테이블명

COMMIT -- ROLLBACK

<부분컬럼>

BEGIN TRAN

INSERT INTO 복사될테이블명 SELECT AAA,BBB FROM 복사대상테이블명

COMMIT -- ROLLBACK

2010년 3월 20일 토요일

2005, 2008 에서 더이상 지원되지 않는 기능

SQL SERVER 2005에서 더이상 지원되지 않는 기능
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ko/instsql9/html/d686cdf0-d11d-4dba-9ec8-de1a5f189f25.htm



SQL SERVER 2008에서 더이상 지원되지 않는 기능
http://msdn.microsoft.com/ko-kr/library/ms144262.aspx

isql, osql , sqlcmd

isql

http://technet.microsoft.com/en-us/library/aa214007%28SQL.80%29.aspx


osql

http://technet.microsoft.com/ko-kr/library/ms162806(SQL.90).aspx
http://technet.microsoft.com/en-us/library/aa214012%28SQL.80%29.aspx

2010년 2월 13일 토요일

Linked Server (연결된 서버)

mysql 연결된 서버 연결을 위해 삽질을 하며 깨우친것들...

우선 mysql에 연결된 서버로 연결하기 위해선 ODBC드라이버 설치가 필요하다.
ODBC드라이버는 mysql홈페이지에서 다운로드가 가능하다.
mysql홈페이지에서 ODBC드라이버를 다운로드 받아 설치 후 SSMS에서 확인해보면 연결된서버
공급자에 MSDASQL 항목이 생겨야 한다.
안생길 수도 있는데 이것때문에 한참 해메다 찾아낸 방법은 서버에서 regsvr32명령으로 C:\Program Files\Common Files\System\Ole DB\MSDASQL.DLL을 등록시켜주면 된다.
그다음 원격지에서 연결시에는 항상 권한을 잘 확인하여 원격지 접속 유저가 접속하려는 DB,Table,column에대한 접근권한을 확인한다.