본문 바로가기

DB

(15)
[MSSQL 2000] 다른 테이블과 조인걸고 DELETE 하기 일반 DELETE문과 조인거는 SELECT문의 단순한 결합이라고 생각하면 된다. WHERE없는 일반적인 DELETE문을 만들어놓는다. 그리고 삭제하길 원하는 데이터만 나오도록 쿼리문을 만든다. SELECT 부라부라 FROM 부라부라 INNER JOIN 부라부라 의 형태가 나올것인데 이 중에서 FROM부터 마지막까지를 복사한다. DELETE시에 삭제하고자 하는 테이블을 첫번째 FROM에 놓고, 조인걸고자 하는 테이블을 두번째 FROM에 놓고, 그담부터 자유롭게 조인건다. 1.일반 DELETE문 DELETE FROM테이블AA 2.삭제할 내용만 뽑아내는 SELECT문 SELECTAA.* FROM테이블AA AA WITH (NOLOCK) INNER JOIN 테이블BB BB WITH (NOLOCK) ON AA.컬럼..
[MSSQL 2000] ORACLE의 MINUS 연산 구현(차집합) 차집합의 경우는 아래와 같이 구현하면 되지만 한쪽이라도 테이블이 매우 큰 경우에는 이 방법으로는 시간이 너무 오래 걸린다. 그래서 그럴 겨우에는 그냥 교집합 구한담에 원하는 집합에서 교집합을 제거하는 순차적인 방법이 훠~얼씬 빠르다. SELECTC.ch_Name FROMCharacter C WHERENot Exists ( SELECT Ch_Name FROM Experence WHERE ch_Name = c.ch_Name ) SELECTC.ch_Name FROMCharacter C Left Outer Join Experence E ON C.ch_Name = E.ch_Name WHEREE.ch_Name Is Null
[MSSQL 2000]테이블명으로 PK 컬럼 반환하기 SELECTC.NAME FROMSYSOBJECTS O INNER JOIN SYSINDEXES I ON (O.ID = I.ID) INNER JOIN SYSCOLUMNS C ON (I.ID = C.ID) WHEREO.NAME = '테이블명' AND (I.STATUS & 0X800) = 0X800 --PK를 의미하는거 같다. AND (C.NAME = INDEX_COL (@TABLENAME, I.INDID, 1) OR C.NAME = INDEX_COL (@TABLENAME, I.INDID, 2) OR C.NAME = INDEX_COL (@TABLENAME, I.INDID, 3) OR C.NAME = INDEX_COL (@TABLENAME, I.INDID, 4) OR C.NAME = INDEX_COL (@TABL..
[MSSQL 2008]MS-SQL 2008 서비스팩1을 설치해야 하는 이유 MS-SQL 2008이 처음 나왔을 때 뭐가 바뀌었나 해서 Express버전을 설치해보고 그 날로 바로 지웠다. 천여개의 테이블과 수백개의 저장프로시저를 사용하는데 원하는 테이블이나 저장프로시저만 검색해서 볼 수 있는 필터링 기능은 꼭 필요한 기능인데 이 기능에 버그가 있었기 때문이었다. 또한 2008에서 한 가지 버그를 또 발견하였는데 만약 내가 여러 데이터베이스 중 중간쯤에 있는 하나의 데이터베이스에만 접근 할 수 있는 권한이 있을 때(주로 웹호스팅 서비스를 받고 있을 때 이런 경우가 많이 발생한다) 데이터베이스 접근 권한이 없다는 오류와 함께 데이터베이스 목록을 가져오지 못하는 상황이 발생하게 되며 결국 내가 권한이 있는 데이터베이스까지 가보지도 못하게 된다. 그러다가 어제 서비스팩을 설치해보고 버..
[MSSQL 2000]실행중인 프로세스만 조회하기(커서 사용,실행중 쿼리문 포함) 쿼리는 길지만 상당히 핵심 부분은 상당히 간단한 쿼리다. sysprocesses 테이블에서 정보 가져오는 부분이 핵심인데 sp_who 쿼리를 조금 변형한 것에 불과하다. 여기에 기존 sp_who에서는 명령이 update중인지 insert중인지 그런 형식으로만 보여주기에, 실제로 해당 프로세스에 보냈던 명령을 같이 보여주기 위해서 dbcc inputbuffer()하고 연결시켜주는 부분을 추가하였다. 그러나 이 부분을 추가하기 위해서 어쩔 수 없이 cursor를 쓰게 되었다. 역시 cursor가 들어가면 괜히 쿼리가 길어지고 복잡해보인다..ㅋ ㅋ ---------------------------------------------------------------- --현재 돌고 있는 놈들의 리스트를 뽑아낸다. ..
[MSSQL 2000] 현재 동작중인 SPID만 조회하기 SELECT SPID ,ECID ,STATUS ,LOGINAME=RTRIM(LOGINAME) ,HOSTNAME ,BLK=CONVERT(CHAR(5),BLOCKED) ,DBNAME = CASE WHEN DBID = 0 THEN NULL WHEN DBID 0 THEN DB_NAME(DBID) END ,CMD FROM MASTER.DBO.SYSPROCESSES WITH (NOLOCK) WHERE SPID > 50 --시스템이 사용하는 프로세스는 조회할 필요가 없다. AND SPID @@SPID --자신의 SPID는 조회할 필요가 없다. AND UPPER(CMD) 'AWAITING COMMAND'
[MSSQL 2005]사용자 계정 권한 수정 2005의 SQL Server Management Studio에서 권한 설정하다가 보면 오류나는 경우가 너무 많다. (바보같은 프로그램이다.. 2000의 EM이 훨씬 사용하기 편한거 같다.) 아무튼 다음 구문을 통해서 사용자 계정의 권한을 수정하자. 사용자 계정을 ABCDEFG라고 하면, -- 이 구문으로 소유한 오브젝트가 있는지 확인 SELECT * FROM SYS.OBJECTS WHERE SCHEMA_ID=SCHEMA_ID('ABCDEFG') -- SCHEMA 삭제 DROP SCHEMA ABCDEFG -- 유저 삭제 DROP USER ABCDEFG -- UI에서 새로운 유저를 생성한다. 보안 > 사용자 보안 > 스키마 마지막 단계에서는 오류를 안 내더군요..ㅋㅋ