728x90

 

MS-SQL 테이블 생성 시 컬럼의 [ID 사양]을 "예"로 체크한 후 [ID증가 값, ID초기값]을 생성하면 이후부터 테이블의 데이터 로우가 생성될 때마다 해당 컬럼의 값이 자동으로 증감하여 생성된다. 

해당 컬럼의 경우 INSERT 할 때 별도의 값을 지정하여 넣을 수 없다는 것은 참고하자.

테이블 디자인 - ID 사양 항목

 

위와 같이 테이블 설정 한 이후부터는 테이블의 모든 데이터를 생성하더라도 해당 컬럼은 1부터 시작되는 것이 아닌 지워지기 전의 ID 다음 값으로 데이터가 생성된다. 

해당 값을 1부터 초기화 하기 위해서는 다음과 같이 작업해야 한다. 

 

--============================================
-- 1. 현재 테이블의 ID 값 확인 
-- DBCC CHECKIDENT(테이블명, NORESEED)
--============================================
DBCC CHECKIDENT(COR_DataImport_M, NORESEED)

ID 값 확인

 

 

--============================================
-- 1. 현재 컬럼의 ID 값 초기화 (IDENTITY 값 초기화)
-- DBCC CHECKIDENT(테이블명, reseed, 초기화값) 
-- 초기화값 : 0으로 설정해야 1부터 생성 됨.
--============================================
DBCC CHECKIDENT(COR_DataImport_M, reseed, 0)

--============================================
-- 2. ID값과 컬럼 값이 일치되도록 아래 구문 실행
-- DBCC CHECKIDENT(테이블명, reseed) 
--============================================
DBCC CHECKIDENT(COR_DataImport_M, reseed )

ID 값 초기화

 

ID 값과 컬럼 값 일치 되도록 구문 실행

 

위와 같이 실행하면 테이블의 신규 데이터 입력시 초기화된 값부터 생성된다. 

 

728x90
728x90

1. DBMS 테이블 확인 

SELECT *
FROM information_schema.tables

뷰/테이블이 같이 나오므로 순수 테이블만 확인 하고 싶은 경우 다음과 같이 확인하면 됨. 뷰 확인은 TABLE_TYPE = 'VIEW' 로 하면 됨.

SELECT *
FROM information_schema.tables
WHERE table_type = 'base table'


2. DBMS 전체 TABLE별 ROW COUNT 확인

SELECT o.NAME,
 i.rowcnt
FROM sysindexes AS i
  INNER JOIN sysobjects AS o ON i.id = o.id
WHERE i.indid < 2  AND OBJECTPROPERTY(o.id, 'IsMSShipped') = 0
ORDER BY o.NAME

728x90
728x90



SELECT *
INTO 새로운 테이블명
FROM 구 테이블명

728x90
728x90


1. 테이블처럼 생성하고 싶은 함수를 생성한다.

CREATE FUNCTION 함수명
(
 @조건1 VARCHAR(100),
 @조건2 VARCHAR(100),
)
RETURN TABLE
AS
RETURN
(
 SELECT *
 FROM 테이블명
 WHERE 조건1 = @조건1
 AND 조건2 = @조건2
)


2. 생성 후 조회 방법
테이블과 같이 조회 가능하고 WHERE절도 똑같이 사용가능하다.

SELECT *
FROM 함수명('조건1', '조건2')

table함수는 스칼라함수와는다르게 함수명만 적어주면 사용이 가능하다.

테이블함수의 제약
- 저장프로시져처럼 여러개의 결과 테이블을 반환할 수 없다. 오직 한개의 결과 테이블만 반환한다.
- 원하는 형태의 테이블을 만들어 낼 수는 있지만 그 결과는 단 하나의 Select문 이어야 한다.
- 함수내부에서 업데이트 작업을 수행할 수 없다.
- 동적 execute 함수로 테이블을 반환할 수 없다. (execute ('select * from test') 와 같은 형태는 불가

테이블함수
* 값을 테이블형태로 넘겨준다. 넘겨주는 테이블은 한개이상이 될 수 없다.
* 테이블함수는 스칼라함수와 다르게 함수명만 적어주면 된다.

 view와의 차이점
* view의 경우 조건지정이 불가능하다.(where문을 사용못하는 것이 아니라 유동적인 조건 지정이 불가능한 것이다.) 예를들어 view의 경우 2005, 2006, 2007년도의 데이터가 각각 필요할 경우 해당하는 조건에 맞는 view를 모두 따로 생성하여야 하지만 테이블함수의 경우 한개만 만들어두고 넘겨주는 값만 다르게 하여 사용할 수 있는 것이다.

저장프로시져와의 차이점
* 저장프로시져의 경우 일단 모두 받은후에 C#이나 해당 프로그램상에서 코드로 정리하는 작업을 진행하여야 하나 테이블함수의 경우 원하는 데이터를 간추린후 다시한번 더 원하는 결과를 출력할 수 있는 장점이 있다.



728x90
728x90


유용한 툴.
전에 프로시저, 테이블, 함수등에 컬럼 찾아내는 쿼리를 짠 적이 있었는데 아래 툴을 사용하면 쿼리 사용하지 않아도 될 듯 하다.

http://www.red-gate.com/products/sql-development/sql-search/

728x90

+ Recent posts