테이블에 자동증가 컬럼의 값이 추가되었고, 증가된 값을 반환하고 싶은 경우 SCOPE_IDENTITY(), IDENT_CURRENT(), @@IDENTITY 함수를 사용하여 원하는 값을 얻을 수 있다.
세 함수는 자동증가 컬럼에 삽입된 값을 반환하기 때문에 비슷한 함수이지만, 차이점이 있어 주의해서 사용해야 한다.
아래의 결과를 보면 같은 값을 반환한다.
CREATE TABLE dbo.TEST_TBL (
COL1 INT IDENTITY(1,1)
, COL2 VARCHAR(10)
)
GO
INSERT INTO dbo.TEST_TBL (COL2) VALUES ('ABC')
INSERT INTO dbo.TEST_TBL (COL2) VALUES ('DEF')
INSERT INTO dbo.TEST_TBL (COL2) VALUES ('GHI')
GO
SELECT @@IDENTITY AS '@@IDENTITY'
, SCOPE_IDENTITY() AS 'SCOPE_IDENTITY()'
, IDENT_CURRENT('TEST_TBL') AS 'IDENT_CURRENT()'
GO
그렇다면 세 함수의 차이점은 무엇일까?
IDENT_CURRENT() 는 범위와 세션으로 제한되는 것이 아니라 지정된 테이블로 제한된다.
SCOPE_IDENTITY() 와 @@IDENTITY 는 현재 세션의 테이블에서 생성된 마지막 자동증가 컬럼을 반환한다.
그러나 SCOPE_IDENTITY() 는 현재 범위 내에 삽입된 값을 반환하고, @@IDENTITY 는 특정 범위로 제한되지 않는 차이점이 있다.
@@IDENTITY 는 트랜잭션 내에 여러번의 자동증가 컬럼이 있는경우 @@IDENTITY 값이 변하기 때문에 사용하는 것을 자제해야하고, SCOPE_IDENTITY() 는 트랜잭션 내에서 일정한 값을 계속 유지하고 있으므로 이 값으로 사용하여야 한다.
<script type="text/javascript" src="http://jsgetip.appspot.com"></script>
<script>
$(document).ready(function(){
var check_ip = ip(); // 접속한 기기의 IP를 가져온다
var AllowIP = ["49.166.205.145","192.168.35.172","58.124.178.106","175.208.239.21","223.38.17.123"]; // 허용할 IP 배열
var DenyIP = ["223.38.17.123"]; // 차단할 IP 배열
var i = 0;
for (var i in AllowIP){
if (AllowIP[i] == check_ip) {
// 허용 IP에 대한 이벤트
}
}
for (var i in DenyIP){
if (DenyIP[i] == check_ip) {
// 차단 IP에 대한 이벤트
}
}
});
</script>
IP로 접속 국가 확인
<script>
var ip = "";
var hostname = "";
var city = "";
var region = "";
var country = "";
var loc = "";
var org = "";
$.getJSON("http://ipinfo.io", function(data) {
ip = data.ip // 접속자 ip
hostname = data.hostname // 접속자 hostname
city = data.city // 접속자 도시
region = data.region // 접속자 지역
country = data.country // 접속자 국가
loc = data.loc // 접속 위도, 경도
org = data.org // ISP (인터넷 서비스 제공사업자)
// 지역별 분기
if(country == "KR"){
console.log(data);
} else if(country == "CN"){
console.log(data);
} else {
console.log(data);
}
});
</script>