레이블이 MS-SQL인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MS-SQL인 게시물을 표시합니다. 모든 게시물 표시

2009년 10월 17일 토요일

MS SQL 2008 Enterprise 설치방법 & 순서

출처 : 내안의 디지털 세상 ( http://prolite.tistory.com/6 )

원문에서 이미지를 따왔으며 몇글자만 수정해서 올려드림을 알려드립니다.



Microsoft SQL Server 2008 설치

설치 파일이나 DVD 시디가 없으신경우..
아래 마이크로소프트 홈페이지에서 평가판을 다운로드 받으시기 바랍니다.
http://sqlserver.dlservice.microsoft.com/download/0/C/D/0CDFF659-622D-459D-A24B-41DE64C89D9A/SQLFULL_KOR.iso?lcid=1042

자 이제 설치시디를 넣으시거나 데몬이나 시디스페이스로 엽니다.

처음 실행시 cmd 창이 않닫히는경우 그냥 닫아주시면 됩니다.

좌측메뉴의 설치 -> 우측메뉴에서 첫번째 "새 SQL Server 독립 실행형 설치 또는 기존 설치에 기능추가"
설치 가능여부 검사
상태가 모두 성공임 -> 설치 가능
제품키 입력
제품키가 없을경우 "무료버전 지정"  -> 평가버전으로 선택
약관 동의 체크
다음 클릭!!
기능 설치준비
규칙 검사 진행 - 설치시 문제가 발생되는지를 검사하는것이죠 ^^
아래처럼 방화벽에만 경고가 뜨는데 문제없이 설치됩니다~ 다음!!
저는 모두선택 클릭했지요~ 모두선택 다음!!
여기서는 "기본 인스턴스" 선택후 다음으로~~
디스크 공간 확인
모든 SQL Server 서비스에 동일한 계정 사용 클릭!!
계정 선택 화면
두번째 계정 "NT AUTHORITY\SYSTEM" 으로 선택합니다.
데이터정렬 방법 기본값으로 두고 다음
혼합모드 체크!! -> 암호설정
현재 사용자 추가를 통해 SQL 관리자를 선택합니다
현재 사용자 추가 :: SQL SERVER 관리자 계정을 추가해주는것입니다
지금까지의 모든 설정을 토대로 설치가 시작됩니다.
p.s - 무지하게 오래걸립니다 ㅡㅡ;;
30분후의 모습이지요~ 아직두 ㅎㅎ;;
설치완료!!
SQL 실행하기 저놈을 눌러주셈~~ ^^
데이터베이스 엔진
서버 이름 -> 왠만하면 IP주소로 지정하라는군요 ^^
아까 지정하신 암호로 로그인하시면 됩니다

설치 끝~~~~ 이제 공부만하면 되겠지요?? ㅎㅎㅎ

2009년 10월 16일 금요일

[MS-SQL] ASP 에서 DB/TABLE 존재여부 알아내기

출처 : 드래곤아이 웹 스쿨 ( http://www.dragoneye.co.kr/dboard/board/index.asp?url=view&boardid=column11&field=&str=&page=1&sid=2830 )

-------------------------------------------------------------------------------------
■ 디비 존재 여부 알아내기및 이름 정하기
<%
ConnString = "Provider=SQLOLEDB;Data Source=(LOCAL);Initial Catalog=master;User ID=sa;Password=wqewqea1234;"
'//master 디비에 들어갈 수 있는 계정으로 연결문자 작성

set db = server.createobject("adodb.connection")
db.open ConnString

sql = " select name from master.dbo.sysdatabases "
'// 모든(사용자+시스템) 디비이름 가져오기
set rs=db.execute(sql)

if not rs.eof then

do until rs.eof

'//// 여기서 만들려는 디비이름과 중복여부 체크및 이름 바꾸기를 적용해야겟죠. 아래는 그냥 출력만해봅니다
response.write rs("name") & "<br>"

rs.movenext
loop
end if

rs.close
set rs=nothing
db.close
set db=nothing
%>


■ 테이블 존재 여부 알아내기및 이름 정하기

<%

ConnString2 = "Provider=SQLOLEDB;Data Source=(LOCAL);Initial Catalog=son;User ID=sss;Password=1234;"

set db2 = server.createobject("adodb.connection")
db2.open ConnString2

sql = " select name from sysobjects"
'// 모든(사용자+시스템) 테이블이름 가져오기
set rs=db2.execute(sql)

if not rs.eof then
do until rs.eof

'//// 여기서 만들려는 테이블이름과 중복여부 체크및 이름 바꾸기를 적용해야겟죠. 아래는 그냥 출력만해봅니다

response.write rs("name") & "<br>"

rs.movenext
loop
end if

rs.close
set rs=nothing
db2.close
set db2=nothing

%>

============================================================================================

◆ 테이블 존재여부 - 테스트 확인 정상작동됨

<%
' 쿼리문 작성 - 테이블 존재여부 확인
tsql = "SELECT name FROM sysobjects "
tsql = tsql & " WHERE name='테이블이름' "

' 테이블 존재여부 확인
set rs1 = dbconn.execute (tsql)

if rs1.EOF or rs1.BOF then

response.write "<b>테이블이 존재하지 않습니다.</b>"

else

response.write "<b>테이블이 존재합니다.</b>"

end if
%>


2009년 10월 14일 수요일

ADO(ActiveX Data Object) 객체 - ms-sql

지금부터 하고자 하는 것은 ADO를 이용하여 DB(Data Base)를 조작하는 방법을 공부하겠습니다.
모든 Server Side Script 언어가 그렇듯이 DB를 다루지 못하면 별루 필요가 없겠죠.
DB와 연동을 시킴으로 진정한 웹페이지가 탄생하는것입니다.
DB가 사용되는 곳은 게시판, 방명록, 또 다움의 카페도 이러데이터 베이스를 사용하여 카페를 관리하고 만들어 주고 그렇게 하는걸로 알고 있습니다.
더 나아거서는 홈페이지 자체를 DB 에 넣는다는 말도 있고 어떤 동영상을 DB에 넣어서 검색 가능하게 한다는 말도 떠돌고 있습니다.
그럼 우리가 해야 할 것은 모두들 접근하기 쉬운 MS-Access로만든 *.mdb 파일을 다루는 방법을 배우고 겠습니다.
그리고 ODBC를 사용하여 접근하는 방법이 있고 ODBC를 사용하지 않는 방법이 있는데 제가 .net 세미나를 들어 보니까. ODBC를 사용하는건 에러발생이 많고 속도가 느려지고 부하가 많다고 ADO에 직접 연결하는편이 좋은 선택이라고 하기에 직접연결해서 쓰도록 하겠습니다.

이 ADO 는 PWS, IIS 설치시 자동으로 설치됩니다.^^

ADO는 ADO.net이 있을 만큼 거대합니다. 하지만 정말 필요하는 부분은 조금뿐입니다. 다 알필요는 없습니다.
다음 몇 개만 알면 하고자 하는 모든일을 할 수 있을 것입니다.

(DB를 사용하는건 파일을 사용하는것과 비슷합니다. DB도 하나의 파일이죠!!)

순서

1. DB파일을 열어 헨들을 얻는다. 얻을적에 (ADODB.Connection)

2. DB파일의 SQL문을 던져 레코드셋을 얻는다(Set RS = Conn.Execute(mySQL))

3. 그 레코드들을 사용하여 읽고, 쓰고, 갱신 한다.

4. DB를 위해 할당했던 자원들을 돌려 준다.


너무 어렵죠.. 그럼 실전 예제를 하나 만들어 보죠..

만약 MS-Access 프로그램이 있으신분은 test.mdb파일을 만드시고 없으신분은 게시판에서 다운로드 받으세요^^

파일의 위치는 : C:\test.mdb

테이블 내용 테이블명 : 메모

자 그럼 간단하게 메모장의 일부만 보여 드리도록 하겠습니다.

일단. 데이터가 있다고 가정하고 읽어 오는 것을 하겠습니다.

물론 이게 전부가 아닙니다. 하나의 레코드만 읽어 오는 것을 만들었지만 Do While 문을 이용하여 많은 레코드들을 읽어오고.. 삽입, 삭제, 수정까지 가능하게 만들어야 하죠.






Default.asp 파일이죠..

<%

Set Con = Server.CreateObject("ADODB.Connection") ' ADO를 써야죠.. Connection개체

Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=C:\test.mdb" ' DB 열기

mySQL = "SELECT * FROM 메모"

Set RS = Con.Execute(mySQL) ' Execute함수의 반환형이 Recordset이에요..

Response.write RS("memo_ID") & " " & RS("이름") & " " & RS("내용") & " " & RS("날짜") & " " & RS("이메일")

RS.Close

Set RS = Nothing

Con.Close

Set Con = Nothing

%>



아주 기초적인 데이터 베이스 다루는 방법을 다루었습니다.
이걸 확장해서 간단한 메모장은 ADO의 전반적인 것을 보고 만들어 보도록 하겠습니다.^^

1. ADO architecture(아키텍쳐) :전체적 구조입니다.

ADODB.Command 개체

ADODB.Connection 개체

ADODB.DataControl 개체

ADODB.DataFactory 개체

ADODB.DataSpace 개체

ADODB.Error 개체

ADODB.Field 개체

ADODB.Parameter 개체

ADODB.Property 개체

ADODB.RecordSet 개체


이쿠 이많은 개체들을 다 알아야 하는가??
이걸 다 알 필요도 없고 알아도 필요한게 많이 없기 때문에 가장 필요한 두가지만 다루도록 하겠습니다.
더 아시고 싶으시면 MSDN을 참고하세요^^

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/dasdkadooverview.asp

1.1 Connection 개체

이 개체는 데이터베이스와 연결 및 실행에 관한 기능들을 모아둔 꼭 필요한 개체이다.

속 성

ConnectionTimeout

연결시간을 지정하거나 반환(Default = 15초)

ConnectionString

연결을위한 문자열이 들어간다. open 메서드 뒤에 두어도 된다.

DefaultDatabase

기본으로 사용할 데이터 베이스 이름 설정, 반환

메 서 드

Open

DB와 연결확립.

Execute

SQL문 실행 :SQL문은 본 홈페이지 mySQL강좌의 기초를 참조 하세요^^

Close

DB를 열었으면 닫아 두어야죠^^

BeginTrans

트랜잭션을 시작한다.

CommitTrans

변경내용을 저장하고 트랜잭션을 끝낸다.

RollbackTrans

변경내용을 취소하고 트랜잭션을 끝낸다.

Cancel

Open, Execute 함수의 호출을 취소.

컬 렉 션

Properties

Connection의 속성들

Errors

연결에 대한 에러들...


1.2 Recordset개체

데이터를 조작하거나 조회하는데 사용. 질의어의 결과 레코드를 가지는 객체, 지속적인 연결이 필요하지 않을 경우 사용한다.

속 성

CursorType

커서형식 지정 및 반환

.adOpenForwardOnly(0): 커서를 앞으로만 이동, 순차적으로 한번만

참조시 우수(default)

.adOpenKeyset(1): 원하는 방향 모든 이동 가능, 변경내용 볼 수 있

으나 추가 삭제 내용 볼 수 없다.

.adOpenDynamic(2):원하는 방향 모든 이동가능, 삭제, 삽입, 변경

모두 볼 수 있다.(○)

.adOpenStatic(3): 원하는 방향 모든 이동가능, 삭제, 삽입, 변경

모두 볼 수 없다.(×)--> 이걸 많이사용

.adOpenUnspecified(-1): 커서유형 지정 안함

LockType

레코드 작업시 잠금형식 지정.

.adLockReadOnly(1):읽기 전용으로 잠금 (Default)

.adLockPessimistic(2):수정시 자금

.adLockOptionistic(3):Update함수를 호출시 잠금

.adLockBatchOprimistic(4):일괄처리모드로 잠금

.adLockUnspecified(-1):유형지정안함.

BOF

Bottom Of File (레코드의 처음)

EOF

End Of File (레코드의 마지막)

PageSize

구성될 페이지의 레코드 수..

AbsolutePage

해당 페이지의 첫 번째 레코드로 이동

PageCount

페이지의 총개수

메 서 드

Open

커서를 연다. RS.Open SQL문, Con, Cursortyp, locktyp, Options

MoveFirst

커서 위치를 첫 번째 레코드로 이동

MoveNext

커서 위치를 다음 레코드로 이동

MovePrevious

커서 위치를 이전 레코드로 이동

MoveLast

커서 위치를 마지막 레코드로 이동

Move

레코드의 위치 이동

RS.Move 레코드수, 시작값

-시작값-

.adBookmarkCurrent: 현재 레코드를 시작위치로

.adBookmarkFirst :제일 첫 번째 레코드를 시작위치로

.adBookmarkLast:제일 마지막 레코드를 시작위치로

AddNew

새레코드를 만든다

Update

레코드 변경

Delete

레코드 내용삭제


이 밖에 많은 속성, 메서드가 있지만 이것만을 사용하도록 하겠다.

●간단한 메모장

그럼 지금부터 위에서 다룬 내용을 기본으로 해서 간단한 메모장을 만들어 보도록 하죠^^

메모장의 기능: (글보기,글쓰기) 두가지 기능 구현 아주 간단

1. DB 설계

파일의 위치는 : C:\myDB.mdb <- DB파일은 다른곳에 두어야죠^^

테이블 내용 테이블명 : 메모

2. 디렉토리

기본 webroot에서 memo라는 디렉토리를 만든다. 그리고 파일구성은 다음과 같다.

webroot\memo\메모.asp <- 메모를 보여주는데 사용

삽입.asp <- 메모를 삽입할시 사용

3. 소스코드

-- 메모.asp --

<%

Set Con = Server.CreateObject("ADODB.Connection") ' ADO를 써야죠.. Connection개체

Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=C:\mydb.mdb" ' DB 열기

mySQL = "SELECT * FROM 메모 ORDER BY memo_ID DESC"

Set RS = Server.CreateObject("ADODB.Recordset")

RS.Open mySQL,Con, 3 ' 앞의내용을 참조 하세요

RS.PageSize =13 ' 13칸

cPage = Request.QueryString("cPage")

if cpage ="" then

RS.AbsolutePage = 1 ' 1페이지로 설정

else

RS.AbsolutePage = cPage ' 현페이지 설정

end if

If Not (RS.EOF and RS.BOF) then ' 끝, 처음이 아니면.

i = 1

%>

<table border=1>

<tr>

<td>번호</td><td>메모</td><td>이름</td><td>날짜</td>

<%

Do until RS.EOF Or i > RS.PageSize

%>

<tr>

<td><%=RS("memo_ID")%></td><td><%=RS("내용")%></td>

<td><a href="mailto:<%=RS("이메일")%>"><%=RS("이름")%></a>< /td><td><%=RS("날짜")%></td>

</tr>

<%

RS.Movenext

i = i + 1

Loop

end if

page_s = cpage - 5 ' 앞으로 5레코드

page_e = cpage + 5 ' 뒤로 5레코드

if page_s <= 0 then page_s = 1 ' 현 레코드 보다 적으면

if page_e >= RS.PageCount then page_e = RS.PageCount ' 끝이상 이면

for i =page_s to page_e

%></table><a href="메모.asp?cPage=<%=i%>"><%=i%></a>

<%next

' 자원 반납

RS.Close

Set RS = Nothing

Con.Close

Set Con = Nothing

%>

<hr>^^ 작성하기 ^^

<form method=post Action="삽입.asp">

이름<input type=text name="이름"> E-mail<input type=text name="이메일">

내용<input type=text name="내용"> <input type=submit name="작성" value="작성">

</form>

-- 삽입.asp --

<%

IF REQUEST.FORM("이름") ="" OR REQUEST.FORM("이메일") ="" OR REQUEST.FORM("내용") ="" THEN

RESPONSE.WRITE ("이름, 이메일, 내용 모두 입력 하세요")

ELSE

Set Con = Server.CreateObject("ADODB.Connection") ' ADO를 써야죠.. Connection개체

Con.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=C:\mydb.mdb" ' DB 열기

 

' 레코드 삽입

mySQL = "INSERT INTO 메모 (이름,내용,이메일,날짜) VALUES ('" & REQUEST.FORM("이름") &"','" & REQUEST.FORM("내용")&"','" & REQUEST.FORM("이메일") &"','" &DATE() & "')"

Con.Execute (mySQL)

Con.Close

Set Con = Nothing

Response.Redirect "메모.asp"

END IF

%>

 

실행결과...

 

쑁쑁쑁 너무 볼 것 없죠.. 여기서 디자인만 조금 하면 .. 이쁜 메모장이 되는것이죠... 그리구 ..

그럼 다음에는 이쁘게 디자인 해서 올리겠습니다.^^ 위에것은 단지.. asp학습을 위해 만든것이죠..

html과 javascript를 이용하면 더 이쁘고 더 멋진 메모장이 가능하죠..

MS-SQL 쿼리문 정리

테이블 생성


create table sawon

        (

                sa_no int not null,

                sa_irum nvarchar(10),

                dept_no int not null,

                jik nvarchar(10) default '사원',

                pay int,

                ibsail datetime default getdate(),       /* getdate() 오늘날짜 */

                sa_sex varchar(4),

                mgr int

        )

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

데이터 추가


insert into tb_member values

 ('wonbin','123456','원빈',810000,1000000,'wonbin@naver.com','135-902','서울시 강남구 압구정','010-333-444',getdate(),1)

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

데이터 업데이트


update com_man set m_name='장동권', m_h='영화' where m_name='가'


update com_man set m_h=null where num=4   /* num=4를 null로 바꾼다 */


update com_man set m_h='작업' where (m_h is null) or (m_h='')


update com_man set m_name='원빈' , c_id=3, m_h=null where num=6

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

조건 검색 정렬


select sa_irum as '이름',pay as '급여',floor(pay*0.7) as '보너스', floor((pay*12)+(pay*0.7)*6 ) as '연봉' from sawon


--오늘 날짜에 3년을 더하라

select dateadd(year, 3, getdate()) as '3년후'


-- TB_member  에서 이름과 나이를 출력

select s_name as '이름',datediff(year,'19'+left(zumin1,2),getdate()) as '나이' from tb_member


-- 입사일로 부터 30년을 더한값을 정년일로 하여 정년일 출력

select dateadd(year, 30, ibsail) as '정년일' from sawon


select id as '코드번호' from tb_com where com_name='삼성전자'

select com_name from tb_com where id <= 4 order by com_name desc   /* 내림차순 */


select com_name, tel, id from tb_com where com_name like '한%'


select tel from tb_com where tel like ('%1111') or (tel is null)


select * from sawon where jik=(select jik from sawon where sa_irum='최진실')


select * from sawon where pay > (select avg(pay) from sawon)


select dept_no as '부서', sa_irum as '이름' from sawon where dept_no=(select dept_no from sawon where sa_irum='최진실') order by dept_no, sa_irum


select * from sawon where pay=(select max(pay) from sawon where jik='과장') and jik='과장'


select count(distinct p_id) as '상품 수' from tb_order -- 상품 갯수 확인(중복 제거 distinct)


select sum(su) as '판매된 상품수' from tb_order -- 상품수


select jik as '직책', avg(pay) as  '직책별 급여 평균' , count(jik) as '직책별 사원 수' , sum(pay) as '직책별 급여 합' from sawon where jik<> '사장' group by jik having count(jik) > 4


select p_id as '주문량 10개 이상 상품' , sum(su) as '수량' from tb_order group by p_id having sum(su) >= 10


select count(ibsail) as '사원수' ,  year(ibsail) as '입사년도' from sawon group by year(ibsail)


select dept_no as '부서번호',sum(pay) as '급여총합' from sawon where dept_no<30 group by dept_no select dept_no as '부서번호',sum(pay) as '급여총합' from sawon group by dept_no having dept_no<30


select tb_order.p_id as '제품번호', p_name as '제품명',go_no as '고객번호',sa_irum as '사원이름', dept_name as '부서명'  from tb_order, products, sawon, dept  where (tb_order.p_id=products.p_id) and (tb_order.go_no=sawon.sa_no) and (sawon.dept_no=dept.dept_no)


select p_name as '제품명' , p_price as '금액', sa_irum as '주문자' , go_no as '고객번호' from products, tb_order, sawon  where (products.p_id=tb_order.p_id) and (sawon.sa_no=tb_order.go_no) and (p_price > 100000)

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

데이터 삭제


delete tb_member where cur is null

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

프로시져

create proc a_dd @add nvarchar(50)  as

select * from ziptable where  addr like '%'+@add+'%'


a_dd '청파동2가'

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

create proc input @input int, @input2 nvarchar(20), @input3 nvarchar(50), @input4 nvarchar(30)  as

 insert into tb_com values(@input,@input2,@input3,@input4)


input 7,'인텔','미국','001'

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

create proc p_hpsu

 @hp nvarchar(20)  as

select @hp as '통신번호',count(*) as '회원수' from tb_member where hp like @hp+'%'


p_hpsu '010'


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


begin tran -- 복구 시작 위치를 지정


rollback tran -- 복구

2009년 10월 8일 목요일

MS-SQL :: 기본 쿼리문

DB 제작할때 쿼리 문은 항상 작성하는 습관을 들이자.
이 코드를 통해서 여러가지 테스트할때 바로바로 적용해볼 수 있도록 하기 위함이다.

[순서]
1. UDL 파일을 만들어서 DB 커넥션 문을 저장해 놓는다.
2. 쿼리 테이블을 제작
3. 필요하면 로그인 계정 추가
4. 샘플 쿼리 문을 만든다. 아래와 같이
use exam
go

-- 고객 테이블
Create Table dbo.Customers
(
CustomerID int Identity(1,1) Primary Key Not NULL, --일련번호
Name Varchar(25) Null, --이름
Email Varchar(100) Null, --이메일
RegistDate DateTime Default(GetDate()) --등록일
)
Go

--입력 예시
Insert Customers Values('홍길동', 'h@h.com', GetDate())
--출력 예시
Select * From Customers Order By CustomerID Desc
--세부출력 예시
Select * From Customers Where Name = '홍길동'
--수정 예시
Begin Tran
Update Customers
Set Name = '백두산', Email = 'b@b.com'
Where Name = '홍길동' And Email = 'h@h.com'
--RollBack Tran
Commit Tran
--삭제 예시
Delete Customers Where Name = '백두산'
--검색 예시
Select * From Customers
Where Name Like '%백%' Or Email Like '%b%'