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