mssql 명령어 모음

2014.02.19 11:20

소울 조회 수:12202

1 DB정보 알기
--시스템에 생성된 테이블 보기
select * from sysobjects where type='U'

--버전알아내기
select @@version

--서비스 실행상태보기
net start			-- 현재 시작되어 있는 서비스
net start	 mssqlserver
net start mssql$inst

net stop sqlagent

1-2 DBCC
-- 데이타베이스 용량 줄이기
dbcc shrinkdatabase(testdb,10)

-- 데이타베이스 파일 줄이기 10M로 줄이기
dbcc shrinkfile(testdb,10)

--테이블 검사
dbcc checktable

dbcc checkdb

--테이블, 색인의 조각비율
dbcc showcontig

--테이블 색인을 재작성 filefactor 20
dbcc dbreindex(test,'',20)

dbcc shwo_statistics

---지정한 시스템 테이블의 일관성과 테이블간의 일치하지 않는 내용 검사
dbcc checkcatalog test

--I/O량 확인
set statistics io on

1-3 로그백업
--로그백업
backup log pubs to pubslog

--로그를 그냥 비울때
backup log pubs with no_log
backup log pubs with truncate_only

--로그 점유율
dbcc sqlperf(logspace)

1-4 데이타베이스 백업
--백업
backup database pubs to disk='c:\temp\pubs' with init

--복원
restore database pubs to disk='c:\temp\pubs'

1-5 변수의 크기
bigint		8바이트 정수
int		4바이트 정수
smallint		2바이트 정수
tinyint		1바이트 정수
bit		0,1
float		부동소숫점(15자리)
real		부동소숫점(7자리)
datetime		8바이트 날짜시간
smalldatetime	4바이트 날짜시간
char, varchar	8000자이하
nchar,nvarchar	4000자 이하 유니코드
text		8000자 이상
Ntext		4000자 이상 유니코드
binary, varbinary	 8000 바이트 이하 이진
image		8000 바이트 이상 그림
money		8바이트 화폐
smallmoney	4바이트 화폐
table		테이블자체
sql_variant	text, ntext, image, timestamp 를 제외한 모든 자료형 
cursor		커서
timestamp	유일한수

1-6 문자열 변형
convert(char(30), title)		--30글자짜리 문자열로 변형
substring(title,1,30)			-- 전체문장중 30글자만 표시하고 나머지는 공백으로 남겨둠	
cast(title as char(30))		-- 문자열변경

replicate(0,5)			--0을 5번 반복
select getdate()
--날짜
select convert(varchar(30), getdate(),111)
select convert(varchar(30), getdate(),112)
--시간
select convert(varchar(30), getdate(),108)
-- 앞자리 0으로 채우기
create function fn_FillStr
(
	@No bigint,
	@Length int,
	@ReplaceChar char(1)
)
returns varchar(8000)
as
begin
	return 
	( 
		replicate(@ReplaceChar, @Length - len(convert(varchar(20), @No))) + Convert(varchar(20), @No)
	)
end 
go
select dbo.fn_FillStr(123,6,'0')


--3자리마다 콤마찍기
create function fn_CommaFormat
(
	@strNumber varchar(30),
	@chrComma char(1)
)
returns varchar(50)
as
begin
	if len(@strNumber) >3
		set @strNumber = dbo.fn_CommaFormat(substring(@strNumber,1,len(@strNumber)-3),',') + @chrComma + Right(@strNumber,3)
		return(@strNumber)
end
go
select dbo.fn_CommaFormat(12345678,',')
go

1-7 UNION 사용
UNION ALL	-- 중복데이터도 모두 가져옴
UNION		-- 중복데이터는 삭제

1-8 테이타입력
--새로운 테이블에 입력 : 색인이나 키는 복사하지 않는다.
select * into test2
from t1

-- 이미 존재하는 테이블에 테이터 입력
insert test2
	select * 
	from test1

1-9 데이타베이스 의존성확인
sp_help test
sp_helpconstraint test
sp_depends test

sp_helpindex test

--모든 제약 중지
alter table test 
nocheck constraint all

--모든 제약 시작
alter table test
check constraint all

1-10 동적쿼리
declare @sql varchar(255)
set @sql = 'select count(*) from '
set @sql = @sql + 'titles'

exec(@sql)

1-11 CASE
select ... ,
	case whe sex=1 then '남' else '여' end as '성별'
from ...

1-12 동적테이블
declare @i int, @sql varchar(1000)
set @i=0
while @i < 30
begin
	set @i = @i + 1
	set @sql = 'create table a' + convert(varchar(3),@i) + ' ('
	set @sql = @sql + 'id int)'
	select @sql
	exec (@sql)
end
go

select name from sysobjects where type='U' and like 'a%' order by name

1-13 테스트 테이타 입력
--테이블만들기
use tempdb
drop table test
go
create table test
(
	id int indentity,
	name char(80) default 'default name',
	date smalldatetime default getdate()
)
create clustered index test_idx
on test(id)
go

--실행코드
set nocount on

declare @i smallint
set @i=0

while @i < 10000
begin
	set @i=@i+1
	insert test default values
end

set nocount off

select max(id() from test --결과확인

1-14 블로킹 모니터링
sp_who
sp_block
kill 51
dbcc inputbuffer (52)

-- 분산트랜젝션 처리를 하는 도중 오류가 발생하면 자동적으로 롤백처리
set xact_abort on


1-15 function
create function fn_test(@id varchar(4)) return table
as
return
(
	select * from where id=@id
)

--사용
select * from dbo.fn_test('123')

1-16 전표번호 생성
--날짜와 번호로 생성
declare @OrderNum bigint
--select @OrderNum = max(OrderNum) from orders
set @OrderNum=2

if @OrderNum is null or @OrderNum = ''
	set @OrderNum = substring(convert(char(8), getdate(),112),1,8) + '00001'
else
	set @OrderNum = substring(convert(char(8), getdate(),112),1,8) +
	right(replace(str(convert(int,right(@OrderNum,5))+1), ' ','0'),5)

select @OrderNum

2-1 테이블생성
create database test on primary
(
	NAME = N'test_data',
	FILENAME = N'c:\temp\test_Data.MDF',
	SIZE=5,
	MAXSIZE=100,
	FILEGROWTH = 10%
)
log on
(
	NAME = N'test_log',
	FILENAME = N'c:\temp\test_Log.MDF',
	SIZE=2,
	FILEGROWTH = 1MB
)

2-2 identity()함수
select indentity(int,1,1) as Num, Name
into #test
from test

2-3 매월 첫날과 마지막날
declare @CurrDate datetime
set @CurrDate = getdate()
select 
dateadd(dd, -1*day(@CurrDate)+1, @CurrDate) as 시작일,
dateadd(mm, 1, @CurrDate) - day(@CurrDate) as 마지막일

2-4 원격쿼리
select * 
from openquery([killer\sql2000],'select * from pubs.dbo.sales')

select * 
from [killer\sql2000].pubs.dbo.sales