'팁&테크'에 해당되는 글 264건
- 2025.03.10 Select 에서 Selected Item을 해제
- 2024.07.04 DB에 접속 중인 목록 확인
- 2024.05.14 [Lucee CFHTTP] XML Request를 사용 할 때 주의해야 할 점.
- 2022.11.17 [MSSQL] 쿼리를 병렬 처리하게 하는 방법
- 2022.11.14 [Javascript] Trim()
- 2022.10.27 [Coldfusion] Header Override
- 2022.10.06 procedure/function/trigger 의 내용 찾기
- 2022.10.05 [Coldfusion] EncodeForHTML 이후 개행이 필요 할 때.
- 2021.07.09 [Coldfusion] Continue 사용 시 주의할 점.
- 2021.07.05 [Javascript] Base64 encode
select의 option을 숨겼다 보였다 하는 경우 숨길 때 selected option을 unselect 할 때 $().val("") 와 같은 걸 해도 다시 보이게 되면 브라우저에서 기존 상태를 읽어서 selected option이 그대로 나오는 경우가 있다.
이 경우는 아래와 같이 확실하게 selectd 를 false로 처리해야 함
$select.find("option:selected").prop("selected", false).trigger("change");
접속 정보 확인
exec sp_who2;
host 에 ip가 안나오는 경우 sp_who2에서 나온 SPID를 사용해서 아래와 같이 ip를 확인 할 수 있음.
SELECT client_net_address
FROM sys.dm_exec_connections
WHERE session_ID = @@SPID
[Lucee CFHTTP] XML Request를 사용 할 때 주의해야 할 점.

cfhttp(method='POST', charset='utf-8', url=apiUrl, result="response", clientcertpassword=qrCreds.ClientCertPassword, clientcert=qrCreds.ClientCertificate) {
//cfhttpparam(type='header', name='Content-Type', value='text/xml'); //If you use type='xml' in lucee, you should not set the 'Content-Type' header.
cfhttpparam(type='header', name='SOAPAction', value='http://services.escreen.com/RequestTicket');
cfhttpparam(type='xml', value=trim(requestData));
}
위와 같이 Lucee 에서는 type="xml" 로 내용을 전달 하는 경우 "Content-Type: text/xml" 을 전달 하지 말아야 한다.
이유는 type="xml" 일 때 자동으로 "Content-Type: text/xml" 를 추가 하여 수신 측에서 Invalid header 로 처리될 수 있다.
꼭 "Content-Type: text/xml" 을 수동으로 전달 하고자 한다면 type="xml" 을 type="body"로 해야 한다.
쿼리 옵티마이저가 알아서 하겠지만 강제로 병렬 처리 하게 하는 방법은 아래 와 같다.
2016 이상
1
2
3
4
5
6
|
SELECT *
FROM [Sales].[Orders] t
WHERE t.CustomerID >100
ORDER BY OrderID
OPTION(USE HINT('ENABLE_PARALLEL_PLAN_PREFERENCE'))
GO
|
이전 버전
1
2
3
4
5
6
|
SELECT *
FROM [Sales].[Orders] t
WHERE t.CustomerID >100
ORDER BY OrderID
OPTION(QUERYTRACEON 8649)
GO
|
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
header (CFHEADER) 를 사용 하면 header에 동일한 property가 존재해도 추가만 된다.
아래와 같이 사용하면 기존의 property 를 변경할 수 있다.
<cfscript>
pc = getPageContext().getResponse();
pc.setHeader("content-security-policy", "");
</cfscript>
일반 적인 문자열
SELECT DISTINCT
o.name AS Object_Name,
o.type_desc
FROM sys.sql_modules m
INNER JOIN
sys.objects o
ON m.object_id = o.object_id
WHERE m.definition Like '%totalRevenue%'
ESACPE 처리 해야 하는 문자열
SELECT DISTINCT
o.name AS Object_Name,
o.type_desc
FROM sys.sql_modules m
INNER JOIN
sys.objects o
ON m.object_id = o.object_id
WHERE m.definition Like '%\[totalRevenue\]%' ESCAPE '\'
[Coldfusion] EncodeForHTML 이후 개행이 필요 할 때.

rereplace(EncodeForHTML("내용"), "&##xa;&##xd;|&##xd;&##xa;|&##xa;|&##xd;", "<br>", "all")
<cfcontinue> 를 정상적이지 않은 곳에서 사용하게 되면 500 Internal Error 를 발생시키나.
<cfscript> 안에서 continue 를 잘못 사용하게 되면 그 뒤에 나오는 statement (cfscript 안의 statement만) 를 실행하지 않는 큰 문제가 생김.
예를 들어 아래 코드를 실행하게 되면 10 한번만 찍히게 됨.
<cfscript>
a = 10;
continue;
a = 20;
writeOutput(a);
a = 30;
</script>
<cfoutput>#a#</cfoutput>
이건 아래와 같은 경우의 continue 이후의 뒤에 나오는 모든 statement를 건너 뜀(cfscript 안의 statement만)
그래서 cfscript 마지막에 있는 abort 도 실행되지 않음.
<cfscript>
cfloop(query = sampleQuery) {
if(sampleQuery.column eq 1) {
continue;
}
}
abort;
</script>
cfloop 에는 continue, break 를 사용할 수 없으니 반드시 아래와 같이 사용할 것.
<cfscript>
for(var row in sampleQuery) {
if(row.column eq 1) {
continue;
}
}
abort;
</script>
function convertBase64($target, str) {
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}
$target.html(Base64.encode(str));
}