SQL 2000 서비스 팩의 최종판이 SP4를 설치하였다고 안심하면 안된다.

SP4를 설치하고, 아래에서 핫픽스를 설치하여 더욱 안전한 데이터베이스로 유지 하자.

http://support.microsoft.com/?kbid=894905
Posted by leebaro
,
http://support.microsoft.com/kb/321185/
위의 글을 참고하세요

SQL 2005
SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
SQL 2000
SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

SQL 7.0
SELECT @@VERSION
Posted by leebaro
,
오늘 SQL 2000에서 생성한 BAK을 SQL 2005 SSMS를 사용하여 복원을 하려고 했는데 실행이 되지 않았다.

알아본 결과, SQL 2000 파일을 바로 복원 할 수 없고 T-SQL을 사용하여 복원 시켜야 한다.

그럼 오늘은 그 방법을 알아보자.

우선 과정을 나누어 보면 3 단계이다.


  1. BAK 파일에 포함된 데이터베이스와 로그 파일의 목록을 확인한다.
  2. 데이터베이스를 복원한다.
  3. 특정 데이터베이스 동작이 지정된 버전의 SQL Server와 호환되도록 설정한다.

쿼리문은 다음과 같다.

--1단계
Restore FileListOnly
from Disk = 'c:\GOSLDW'
go

--2단계
restore database GOSLDW
from disk = 'c:\GOSLDW'
with move 'GOSLDW_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\GOSLDW_Data.MDF',
MOVE 'GOSLDW_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\GOSLDW_Log.ldf',
stats = 10
go


--3단계
sp_helpdb GOSLDW
go
EXEC sp_dbcmptlevel 'GOSLDW', '90'
go
sp_helpdb GOSLDW
go

위의 쿼리를 실행시키면 아래와 같은 결과값을 볼 수 있다.
사용자 삽입 이미지

참고 : http://kwonsoonjong.com
Posted by leebaro
,
db테이블에 한 차량의 1년치 내용별 데이터가 들어있습니다.


차종,    날짜,          내용,     금액

마티즈, 2007-10-01, 주유비, 10000원

마티즈, 2007-10-02, 주유비,  5000원

마티즈, 2007-10-03, 정비비, 25000원

아반떼, 2007-10-03, 보험료, 30000원    
.
.
.

위와 같이 차량도 종류별로 있고.. 내용도 종류별로 있다. 크게보면 6가지로 구분된다.
이걸 아래처럼 만들 것이다.


 월 | 비용합계 |  주유비 | 정비비 |  ... |  기타  |  합계 |

1월          00원        00원       00원    ...     00원     000원

2월          00원        00원       00원    ...     00원     000원

3월          00원        00원       00원    ...     00원     000원     

'

'

'

12월        00원        00원       00원    ...     00원     000원

합계      000원       000원     000원    ...    000원   0000원


방법.

날짜 중에 월과 내용을 기준으로 Group by를 해주시면 월별 합계가 나온다.
마찬가지로 년과 내용을 기준으로 Group by를 사용해보시면 년별 값계가 나온다.


우선 날짜를 월별로 그룹화 하시려면 뒤에 일자를 잘라 주어야 한다.

char 형식으로 되어 있다면

Select Left(날짜,7) from 테이블 이런식으로 자르시면 된다.

그룹화 하시는 더 자세한 내용을 보시려면 http://sqler.pe.kr/sql2k/28.asp 링크를 참고해 주세요

결과적으로 아래와 같은 쿼리를 사용하여 차종, 월별, 내용 별로 합계를 구할 수 있다.
SELECT 차종, 날짜, 내용, SUM(금액) FROM 테이블 Group by 차종, LEFT(날짜,7),내용


Posted by leebaro
,

하나의 테이블에 부모와 자식 값이 있다. 이것을 조인을 사용하여 부모와 자식 값을 연결 해준다. 그리고 결과값은 아래와 같이 나와야 한다.

--------------------------------------
PIDX          |    LORDER         |  TITLE
---------------------------------------
    null                  1                     T1
      1                    1                     T1-1
      1                    2                     T1-2
      1                    3                     T1-3
    null                  2                     T2
      2                    1                     T2-1
      2                    2                     T2-2
그럼 PIDX와 LORDER을 기준으로 정렬을 하고 가상의 컬럼을 하나 추가해 PIDX와 같은 겂으로 넣어주고 NULL일때만 LORDER 값을 넣어 주면 된다.


CREATE TABLE TEST1 (
[IDX] [int] IDENTITY (1, 1) NOT NULL primary key clustered,
[PIDX] [INT]NULL ,                ------ 부모 IDX
[LORDER] [TINYINT] NOT NULL ,   ----------- 동일 부모의 자식들간의 출력순서
[TITLE] [varchar] (50) NOT NULL
)
go

INSERT INTO TEST1 values(null, 1, 'T1')
INSERT INTO TEST1 values(null, 2, 'T2')
INSERT INTO TEST1 values(1, 1, 'T1-1')
INSERT INTO TEST1 values(1, 2, 'T1-2')
INSERT INTO TEST1 values(1, 3, 'T1-3')
INSERT INTO TEST1 values(2, 1, 'T2-1')
INSERT INTO TEST1 values(2, 2, 'T2-2')
go

방법

select distinct a.pidx , a.lorder, a.title, order_IDX = case a.pidx when null then a.lorder else a.pidx end
from test a
left outer join test b on b.pidx = a.lorder
order by order_idx , lorder asc



Posted by leebaro
,
create table test(URL varchar(50))
insert test
select 'http://blog.rss.naver.com/pjh0001.xml' union all
select 'http://blog.rss.naver.com/pjh0002.xml' union all
select 'http://blog.rss.naver.com/pjh0003.xml' union all
select 'http://www.naver.com/image/images/pjh0004.xml'

------------------------------------
select reverse(parsename(left(reverse(URL),charindex('/',reverse(URL),1)-1),1)) URL from test
/*
URL
---------------
pjh0001
pjh0002
pjh0003
pjh0004

출처 : SQLER
Posted by leebaro
,

그래픽 실행 계획 표시

http://technet.microsoft.com/ko-kr/library/ms178071.aspx


실행 계획을 만드는 T-SQL

http://technet.microsoft.com/ko-kr/library/ms187886.aspx

웹캐스트: Microsoft SQL Server 2000: SQL Server 2000에서 실행 계획 읽기

http://support.microsoft.com/kb/815337/ko

Posted by leebaro
,
Posted by leebaro
,

오늘은 데이터를 A에서 B로 옮길 때 자동 증가값을 생성하는 방법을 살펴 보겠다.

A라는 테이블은 고객 테이블이다. 현재 주민등록번호가 기본키 값으로 잡혀있지만 새로운 데이터베이스로 옮길때는 주민번호를 기본 키값으로 사용할수 없게 되었다면 어떻게 해야하겠는가? 물론 Surrogate key(대체키)를 생성해야 한다.

그럼 데이터를 다 옮긴 다음에 키 값을 생성할 것인가? 아니다. SSMS 작업 중 데이터 내보내기 또는 데이터 가져오기 기능 내에서도 가능하다.

오늘은 이 기능을 살펴 보겠다.

우선 SSMS를 실행 한다. 하고 데이터를 옮길 대상 데이터베이스에서 마우스 오른쪽을 클릭하고 작업에서 데이터 가져오기를 선택한다.

전체 화면 1

 

데이터 원본을 선택한다.

image

 

데이터를 내 보낼 대상을 선택한다.

image 

 

우리는 하나 이상의 테이블 또는 뷰에서 데이터 복사를 선택한다.  쿼리에 자신 있거나 복잡한 쿼리를 만들어야 한다면 전송 데이터를 저장할 쿼리 작성을 선택해도 된다.

윈도우 5

원본 테이블에서 옮김 대상 테이블을 선택하고 매핑 편집 버튼을 클릭한다.

윈도우 6

 

열 매핑에서 원본 컬럼의 유형, 크기 등의 특성을 알맞게 조절하고 SQL 편집 버튼을 클릭한다.

윈도우 7

 

여기에서 우리는 지금까지 설정한 방식에 맞춰진 Create Table 쿼리문을 볼 수 있다. 그럼 쿼리의 Create Table 뒤에 자동 증가값 컬럼인 IDX를 추가한다.

윈도우 8

 

IDX를 추가하면 아래와 같다.

윈도우 9

두번째 줄을 보면 아래의 쿼리가 추가 되었다. 그리고 확인을 클릭한다.

[IDX] IDENTITY(1,1) PRIMARY KEY

즉시 실행을 체크하고 다음을 클릭한다.

윈도우 11

 

마침을 클릭하면 데이터가 옮겨지능 과정이 보이고, 해당 데이터베이스를 확인하면 자동 증가값이 추가된 테이블을 볼 수 있다.

윈도우 12

Posted by leebaro
,

테이블을 만들다 보면 똑같은 키 값이지만 입력된 날짜 순으로 데이터가 들어 갈 수 있다. 나중에 다른 테이블과 조인을 하려고 하는데 중복되는 최신 값 중에 최신 값을 기준으로 하고 싶다면 아래와 같은 쿼리를 사용하여 max와 Group by를 이용하면 된다.

select B.stitle,A.sdate,sflag from (select stitle,max(sdate) sdate from test01  group by
stitle) A  inner join
test02 B ON A.stitle = B.stitle

Posted by leebaro
,