본문 바로가기

MS-SQL

(6)
[MSSQL 2000] 테이블 사이즈 및 그룹보기 SELECT (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'U' AND ID = A.ID) AS 테이블명 ,ROWCNT ,B.GROUPNAME ,CAST(RESERVED*8/1024. AS DECIMAL(15,3)) AS [테이블사이즈(MB)] FROMSYSINDEXES A WITH (NOLOCK) INNER JOIN SYSFILEGROUPS B WITH (NOLOCK) ON A.GROUPID=B.GROUPID WHEREA.ID IN (SELECT ID FROM SYSOBJECTS WHERE XTYPE = 'U') AND A.INDID IN(0,1) ORDER BY GROUPNAME ,TBL_SIZE DESC
[MSSQL 2000] 권한없는 유저에게 저장프로시저의 실행 권한 주기 스키마 관련된 정보를 보여주는 뷰가 있다. 그것은 바로.. master DB에 시스템 뷰로 등록되어 있는 INFORMATION_SCHEMA의 아그들이다. 아래의 쿼리는 대충 사용자 오브젝트들의 목록을 뽑아서 특정 사용자에게 권한을 주는 문장을 생성한다. SELECT'GRANT EXEC ON ' + QUOTENAME(ROUTINE_SCHEMA) + '.' + QUOTENAME(ROUTINE_NAME) + ' TO 사용자계정' FROM INFORMATION_SCHEMA.ROUTINES WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),'ISMSSHIPPED') = 0 ORDER BY 1 따로 수정할 거 없이 이 쿼리를 그대로 실행시키면 된다. 유저 로긴 id는 따옴표로 묶을 필..
[MSSQL 2000]OPENQUERY 사용하기 연결된 서버(LINKED SERVER)로 구성된 원격 DB서버에서 필요한 데이터만 쿼리하여 결과를 가져오는 방법이다. OPENQUERY(LINKEDSERVER,'연결된 서버내에서 실행할 쿼리문') 첫 번째 인자는 LINKED SERVER의 이름이며 작은 따옴표로 묶지 않는다. 두 번째 인자는 실제 쿼리문이며 작은 따옴표로 묶은 문자열이 된다. 그러므로 이 쿼리문 안에서 또 문자열을 써야한다면 아래 예제와 같이 작은 따옴표를 두 번 연달아 써준다. LINKED SERVER를 ㅣ_SERVER라고 할 때, SELECT컬럼CC, 컬럼DD, 컬럼EE, 컬럼FF FROMOPENQUERY(L_SERVER,' SELECTAA.컬럼CC, AA.컬럼DD, AA.컬럼EE, AA.컬럼FF FROM테이블AA AA WITH (N..
[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 2008]MS-SQL 2008 서비스팩1을 설치해야 하는 이유 MS-SQL 2008이 처음 나왔을 때 뭐가 바뀌었나 해서 Express버전을 설치해보고 그 날로 바로 지웠다. 천여개의 테이블과 수백개의 저장프로시저를 사용하는데 원하는 테이블이나 저장프로시저만 검색해서 볼 수 있는 필터링 기능은 꼭 필요한 기능인데 이 기능에 버그가 있었기 때문이었다. 또한 2008에서 한 가지 버그를 또 발견하였는데 만약 내가 여러 데이터베이스 중 중간쯤에 있는 하나의 데이터베이스에만 접근 할 수 있는 권한이 있을 때(주로 웹호스팅 서비스를 받고 있을 때 이런 경우가 많이 발생한다) 데이터베이스 접근 권한이 없다는 오류와 함께 데이터베이스 목록을 가져오지 못하는 상황이 발생하게 되며 결국 내가 권한이 있는 데이터베이스까지 가보지도 못하게 된다. 그러다가 어제 서비스팩을 설치해보고 버..