none
SQL Server 문의. RRS feed

  • 질문

  • 저희는 웹쪽의 개발을 주로 하고 있으며 이번에 파일 업로드 로직 개편으로 인해 임시 테이블을 사용하는 방법으로<o:p></o:p>

    우선 적재하고 최종적으로 실(물리적인) 테이블로 이관하여
    최종 처리하고 있는 로직을 택했습니다.<o:p></o:p>

     <o:p></o:p>

    임시 테이블은 말 그대로 테이블 명 앞에 #하나를 붙일 경우 로컬, 두개를 붙일 경우 전역으로 항상 알고 있었습니다.<o:p></o:p>

     <o:p></o:p>

    이 로컬이라는 것의 의미 자체가 전적으로 하나의 브라우져를 통해 연결된 사용자 하나하나에 의한다는 개념을 가지고 있었구요<o:p></o:p>

    전역이라는 뜻은 이 DB에 연결된 모든 사용자에 한한다고 알고 있었습니다.<o:p></o:p>

     <o:p></o:p>

    그리하여 아래와 같이 임시 테이블을 생성하여 첨부파일 관련 자료를 잠시 적재한 후 소멸시켰습니다.<o:p></o:p>

    아래는 프로그램단에서 바로 실행처리되도록 하고 있습니다. 언어는 주로 ASP 또는 .Net을 사용하구요.<o:p></o:p>

    우선 아래처럼 DB attachfile_temp라는
    임시 테이블이 있는지 질의 후 없다면 Create하고 있습니다.<o:p></o:p>

    SQL = "IF OBJECT_ID('tempdb..#attachfile_temp') IS
    NULL " & _
                "CREATE TABLE #attachfile_temp~~~~~~~~~~~~~~~~~~~~~~~~~<o:p></o:p>

    저는 위 처럼 생성된 임시 테이블은 로그인 한 저에게만 관련된다고 생각하고 있었습니다.<o:p></o:p>

    그리고 데이터를 적재했지요.<o:p></o:p>

     <o:p></o:p>

    그러나 타 PC에서 다른 계정으로 로그인 한 사용자 또한 동일한 로직을 밟게 되는데 위에서 제가
    생성한 테이블에 데이터를 <o:p></o:p>

    읽어버리게 되더라구요.<o:p></o:p>

    예를 들어 제가 저장 클릭 시 DB처리중 타 PC
    사용자 또한 임시 테이블에 적재된 데이터가 있는지 보고 있다면 본인이 올린것으로간주하여<o:p></o:p>

    실 테이블에 자료를 이관하는 과정에서 위 동일 테이블을 바라보고 그대로 자료가 있다고 판단하여 처리되어 버리더라는...<o:p></o:p>

     <o:p></o:p>

    PC의 사용자는 본인만의 임시 테이블을 바라봐야 하지 않나요?<o:p></o:p>

    본인 또한 첨부파일이 있었다면 고유의 영역에 위 임시 테이블(이름은 동일하더라도 세션은 틀리기
    때문에)을 생성하고 적재하고 소멸하고..<o:p></o:p>

     <o:p></o:p>

    그러나 실제는 중첩되어 버리는 결과를 보고.<o:p></o:p>

    제 이론이 잘못된 것이 아닌지 하는 생각에 문의드려 봅니당...<o:p></o:p>



    kon.jun

    2015년 12월 4일 금요일 오전 6:27

모든 응답

  • 안녕하세요,

    임시테이블에 대한 내용은 아래 링크를 확인해보십시오.

    https://technet.microsoft.com/ko-kr/library/ms177399%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396

    임시테이블을 생성하면 해당 사용자의 세션에서만 생성되고 세션이 끊어지면 삭제됩니다.

    여기서 사용자는 데이터베이스에 연결되는 사용자를 말합니다.

    질문에서 본인과 타PC의 사용자도 보인다고 했는데 웹응용프로그램의 DB 연결문자열에서는 특정 사용자 한명으로 들어오기때문에 본인과 타PC의 사용자가 접속해도 특정 사용자 한명이고 연결 세션이 공유되어 동일한 데이터를 보게 되는것으로 생각됩니다.

    해결하는 방법은 임시테이블에 저장할때 사용자 ID를 같이 저장하고 SELECT 할때 해당 사용자 ID로 필터링하여
    하시면 될것 같습니다.


    Hong-ju

    2015년 12월 9일 수요일 오전 4:18