데이터베이스 개발자 질문과 답변 게시판
해킹당한 홈페이지의 DB들의 스크립트들은 드디어 날렸습니다. 찾아가며 알아내며 하는 재미가 있네요;;
이제 남은건 중복된 데이터의 제거인데
selcet distinct addr_idx from dbo.addr
order by addr_idx
라고했는데 메시지창에 이쁘게 1~43009개 까지 중복된 데이터없이 잘떴는데요
하하..... 저장법을 모르네요- _-
스크립트 제거법은
먼저
select substring(컬럼a,1,charindex('<script',컬럼a)-1) from 테이블
where 컬럼a like '%<script%'
위쿼리를 분석기에서 돌리고 아래쿼리를 돌려서
update 테이블 set 컬럼a = substring(컬럼a,1,charindex('<script',컬럼a)-1)
where 컬럼a like '%<script%'
해결을 봤습니다.
그럼 제일위에 저 중복데이터 제거 쿼리도
업데이트 해야지 엔터프라이즈로 열었을때 중복안되게 나오나요
업데이트를 하는 쿼리가 있는지;
Comment 5
-
멍이
2013.02.07 16:37
-
건우아빠
2013.02.07 17:00
5번은 테이블에 pk가 없다보니 동일한 addr_idx로 자료가 들어간 것입니다.
addr_idx로 pk를 설정 하시라는 내용입니다.
distinct * 는 모든 컬럼이 같은 때만 하나만 보이게 됩니다. 만약 하나 라도 다르면 나오게 되는거구요..
add_idx 는 같더라도 다른 컬럼의 값이 다르면 나오게 됩니다.
-
멍이
2013.02.08 09:46
답변감사합니다. 그럼 이제 pk설정하는 법만 알아내면 되겠군요
-
멍이
2013.02.08 09:47
아 이전 테이블에서 pk가 어디에 설정되어있는지는 확인할수있는거죠?
-
멍이
2013.02.08 10:07
흐음 엔터프라이즈 관리자-테이블디자인으로 열어봤는데 좌측열에 키모양이 없단건;; pk가 안잡혀있단건가요;;;;;;;;
안잡아도 상관없는건지가 의문이네요 갑자기;
순서1 . select distinct * into 임시
from 원본
순서2 . delete from 원본
순서3. insert into 원본
from 임시
순서4. drop table 임시
순서5. 원본테이블에 pk를 잡는다.
라는걸 찾았거든요? 근데 순서 1~4까진 이해가 됐습니다. 원본에서 임시테이블로 복사를 하는데 겹치는건 없애고 한단뜻이고
그런후 원본을 삭제 임시로 만든 테이블을 원본테이블에 집어넣고 임시테이블을 버린단거로 알겠는데
마지막에 원본테이블의 pk를 잡는다는데 이게 어떤걸 뜻하는지를 잘모르겠네요;
그리고 순서1에서 distinct * 로 하면 null값인거나 비워둔것도 전부 겹치는 거로 인식하나요?
예를 들어
컬럼 a에는 다른값들이 들어있는데 컬럼b가 전부 같다면; 1개만 출력되나요
아니면 저 * 표시한건 컬럼 a와 b 전부 중복이여야 중복된 행1개를 지우는건가요;