C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[21605] C# 과 MS SQL 의 VIEW에 대해 질문이 있습니다.
주기찬 [] 5426 읽음    2012-07-31 12:53
안녕하세요. 이번에 C# 닷넷을 이용해서 서버를 개발하게된 사람 입니다.

다름이 아니라 VIEW에 대해 질문이 있어서 글을 올리게 되었습니다.

원래는 PHP쪽 개발을 하면서 php 자체에 쿼리문을 넣는 방식을 사용해 주로 개발을 했었습니다. (db는 mysql )

예)  $mysqli->query("SELECT * FROM `test_table`");

그러던 것이 c#을 사용하게 되면서  저장 프로시저라는 기존에 사용하지 않던 개념을 사용하게 되었고

확정된 것은 아니지만 계속해서 지식을 쌓고 있는 중 입니다.

한가지 문제가 된것은 저장 프로시저는 sql 프로그램 내부에서는 exec를 통한 select 문의 결과가 출력이 되지만

c# 쪽으로 반환시킬 수 있는것은 오로지 숫자 밖에 없다는 것이었고

결국 저장 프로시저로써는 insert delete update 에 관한 수행 결과만을 반환 시킬수 있다는 것 이었습니다.

그래서 눈을 돌리게 된것이 view 라고 하는 것 이었는데 가상 테이블 생성을 할 수 있으며 자주쓰는 쿼리들을 미리 지정해 두거나

전체 테이블을 공개하지 않고 테이블의 일부만을 공개할 때 사용하는 것 이라고 이해 했습니다.

하지만 이것도 결국에는 미리 정해진 쿼리만을 출력해 주는 것이지 c#쪽에서 인자값을 받아서 처리할 수 없다는 것을 알게 되었습니다.

구현하고자 하는것은 간단합니다.

클라이언트 프로그램을 통해 ITEM_DB 라는곳의 유저 아이템을 계속해서 INSERT 시키고(프로시저를 통해서) 테이블의 해당 유저ID나 아이템ID 등을 통해서

SELECT하고(WHERE 절 포함 (WHERE 조건은 인자값을 받아서 처리할 수 있어야함)) 그 결과값을 C# 쪽에서 받는 것 입니다.

예:) SELECT * FROM 아이템테이블 WHERE 유저ID='ABC'  ('ABC' 부분은 변수)  혹은
     SELECT * FROM 아이템테이블 WHERE 아이템ID='ABC'


프로시저를 통한 INSERT 는 가능하다는 것을 확인 했으나 VIEW 를 통해 위의 과정을 수행 하는것은 제 생각에는 불가능하다고 보여지는데여

팀장의 말로는 VIEW의 가상테이블을 통해서 위의 과정을 수행하는 것이 가능하다고 합니다. (팀장도 아직 MSSQL 과 C# 에 관한 지식이 많지 않습니다.)

가능하면 혼자 처리해 보고 싶고 팀장의 지시사항이 잘못 되었다면 잘못 되었다고 정확히 말을 하고 싶은데 저도 아직 이쪽에 대해

정확히 아는것은 아니라서 똑 부러지게 말을 못하겠네여 . 

조언을 좀 부탁 드리겠습니다.


추가적으로 VIEW 나 저장프로시저 외에 SELECT 절을 좀더 효과적으로 처리할 수 있는 DB의 프로그래밍 기능이 있는지여 ?
가능하면 프로그램상에서 직접 QUERY STRING 을 넘기는 방식은 사용을 하지 않으려고 해서요.

답변 기다리겠습니다. 감사합니다.

혹시 이곳 게시판의 성격에 맞지 않는 글이라면 삭제 하도록 하겠습니다.
김태선 [cppbuilder]   2012-07-31 13:42 X
데브피아의 C# 포럼에 가서 질문하시는게 빠를 것 같습니다.

그리고 저장프로시져는 인라인 SQL과 마찬가지로 쿼리 결과를 테이블로 리턴할 수 있습니다.
그리고 이 결과를 편하고 자유롭게 사용가능합니다.

자세한 것은 그곳에서 물어보세요.
주기찬 [firifirit]   2012-07-31 13:50 X
답변 주심에 감사합니다 .
일단은 프로시저에서 데이터셋 형태로 리턴 받을 수 있다는 것을 알았다는 것 만으로도 많은 도움이 되었습니다.
자세한 사항은 말씀 주신대로 데브피아로 가서 문의 하겠습니다.
감사합니다.
Lyn [tohnokanna]   2012-07-31 18:54 X
프로시저 쓰면 한큐에 모든 문제가 해결되겠는데요
아루스 [tinydew4]   2012-08-01 09:53 X
view 에 따라 insert 가 가능한 것도 있죠.
저도 DB 는 간단하게 써봐서 명확히 어떤경우라고는 할 수 없지만
아마 여러개의 테이블이 엮이는 등의 복잡한 view 는 insert 가 안될거고,
한가지 테이블에 view 에 노출되지 않는 컬럼은 값이 없어도 되는 경우라면 insert 가 될 거 같네요.
주기찬 [firifirit]   2012-08-01 10:03 X
답변 주신 모든 분들 감사합니다.
제가 얕은 지식으로 프로시저에서 select 절 결과를 c#쪽에서 리턴 받을 수 없다고 단정 지어버렸네여 .
조금더 연구해 보도록 하겠습니다.
감사합니다.
깔쌈보이 [handsome]   2012-08-08 14:21 X
좀 늦은 답변일런지 모르겠지만...
C#과 ms sql 은 정말 기똥찬 궁합을 이룹니다.
프로시져를 이용해서 DataTable 이나 DataSet 을 모두 받을 수가 있으며, 프로시져에 테이블을 통으로 넘겨서 한방에 insert,update,delete를 할 수가 있습니다.

update a set
    a.addr=t.addr,
    a.tel=t.tel
from STD030TM a
    inner join @tmp t on a.juminno=t.juminno and t.gbn='MOD';

뭐 이런식으로 한방쿼리로 쿼리한 테이블 중 변경된 부분만 수정한다던가 등등...

+ -

관련 글 리스트
21605 C# 과 MS SQL 의 VIEW에 대해 질문이 있습니다. 주기찬 5426 2012/07/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.