본문 바로가기

프로그램/mssql

[MSSQL]mssql 정리

반응형

1. mssql에서 object 확인

Select * From sys.sysobjects Where type = 'V'

 

<type>

V: 뷰테이블

FN: 함수

P: 프로시저


참고url : http://blog.naver.com/PostView.nhn?blogId=vackjangmi&logNo=120122385748



2. mssql 에서 user 정보 확인


SELECT @@SPID AS 'ID', SYSTEM_USER AS 'Login Name', USER AS 'User Name'


참고url : http://lcsco.tistory.com/entry/SPID



grant 주기

grant select on [테이블 or view] to 사용자;

grant execute on [function or procedure] to 사용자;


3. synonym 생성

create synonym fn_substring for dbo.fn_substring;

펑션 생성시 dbo 유저로 생성되어서 사용시 dbo. 을 항상 붙여야 하는 상황이 생김

이를 방지하기 위해 synonym 을 생성하였음



4. 날짜함수 관련

select getDate() : 현재날짜


날짜를 문자열로 변환

select convert(char(10), getdate(), 126) 

2005-06-02


yyyy.mm.dd : 102

hh:mm:ss : 108

yyyy/mm/dd : 111

yyyymmdd : 112

yyyy-mm-dd hh:mi:ss(24h) : 120


- 날짜중 지정한 부분만 구해오기

select datepart(yy, getdate() )

yy

mm

dd

hour

mi

ss

dw


select year(getdate())

select month(getdate())

select day(getdate())


dateadd : 날짜를 증가

select dateadd(mm, 20, getdate() )

yy, mm, dd, hour, mi, ss


datediff : 날짜를 비교

select datediff(dd, getdate(), '2013.05.31')

yy, mm, dd, hour, mi, ss


datename : 지정한 날짜의 날자형식

select datename(mm, getDate() )

yy, mm, dd, hour, mi, ss




5. 변환

1. cast(컬럼 as INT)), cast(컬럼 as char(10))) 

2. convert(varchar2(20), 컬럼, 유형)


select cast(datediff(minute, @vi_req_time, @vi_res_time) / 60 as varchar) + '시간 '


6. 문자변수


- ascii() : 아스키값

- char() : 유니코드 반환

- nchar() : 유니코드 반환

- unicode() : 유니코드 반환

- charindex('b', 컬럼, 시작위치) : 위치 찾기

- left(컬럼, 2) : 왼쪽부터 2글자

- right(컬럼, 2) : 오른쪽부터 2글자

- len(컬럼) : 길이

- lower(컬럼), upper(컬럼) : 대소문자

- ltrim(컬럼, rtrim(컬럼) : 공백제거

- replace(컬럼, 찾을값, 변환값) : 값 변경

- replicate("abc", 3) : 반복, abcabcabc 출력

- reverse("abc") : 역순 출력, cba

- space(10) : 10개 공백 생성

- substring(컬럼, 2, 3) : 2부터 3글자

- isnumeric : 숫자형이면 1, 아니면 0

- isdate : 날짜형이면 1, 아니면 0


7. 문자열을 날짜 형태로 변경

select convert(datatime, '20140610') 


8. insert 시 내부에 서브쿼리 사용 불가

insert aa(b) values ((select 1)) 

다음과 같은 오류 발생함

이 컨텍스트에서는 하위 쿼리를 사용할 수 없습니다. 스칼라 식만 사용할 수 있습니다.


변경

insert aa(b) 

select 1 [from aa


이런식으로 변경해서는 가능함


url : http://babolsk.tistory.com/1124


* 자동증가컬럼 값 구해오기

SELECT @@IDENTITY AS IDX

SELECT SCOPE_IDENTITY() AS IDX


같은 세션 내의 마지막 자동증가값을 구해옴

없을 경우 NULL반환


MS200 에서는 되는지 안되는지 모르겠음


참고URL : http://bronto.egloos.com/2065300



9. oracle의 nvl 처리 대신 사용할수 있는 함수

isnull(null, '출력하고자하는 문자열')


''은 null로 취급하지 않음에 주의할 것


10. procedure 내의 소스를 조회하는 view

(ORACLE 로 치면 ALL_SOURCE)


select o.id,o.name,c.text from syscomments c inner join sysobjects o on o.id = c.id



11. 펑션 작성 시 문법

변수선언

declare @v_point int


변수에 값 할당

set @v_point = 1

set @v_point = (

select point from common_code where code = '102323'

);


if 문법

if (v_point = 0 or v_point = 1000) 

구문

else if v_point > 1000 and v_point < 2000

구문

else 

구문


커서 

declare c_code cursor /*커서셋팅*/

for /*커서 쿼리 작성*/

select point, nm, val

from common_code

where category_cd = '1005' and code = @v_temp

for read only

open c_code /*커서 open*/

declare @code_score int, @code_nm varchar(10), @code_val varchar(10) /*커서로 받을 변수*/

fetch from c_code into @code_score, @code_nm, @code_val

while @@fetch_status = 0  /*페치 상태 체크*/

begin

set @v_point = @v_point * @code_score

fetch from c_code into @code_score, @code_nm, @code_val

end

close c_code

deallocate c_code /*할당제거*/


참고url : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0Gpbw&articleno=8006521