database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 1714 게시물 읽기
No. 1714
프로시저에서 문자열처리 따옴표 사용
작성자
김진옥(trueoak)
작성일
2004-12-23 09:20
조회수
10,612

아래 Select 문을 SET 한 부분에서요... Where 뒤에 있는 따옴표 3개랑 4개의 하는 역할을 알고 싶어요..

왜 그렇게 많이 사용했는지 알고 싶어요...^^

이해가 안가서요...

 

CREATE PROC proc_test8
@v_tblname varchar(20)
, @v_title_id varchar(20)
AS
--저장할 변수 선언
DECLARE @v_strSQL VARCHAR(200)
--변수 @v_strSQL에 생성된 문자열 저장
SET @v_strSQL = 'SELECT * FROM ' + @v_tblname + ' WHERE title_id = ''' + @v_title_id + ''''
EXEC(@v_strSQL)

 

 

이 글에 대한 댓글이 총 2건 있습니다.

sql문에서 '(따옴표: quotation)가 오면 그 사이의 글들을 문자열로 만들게 됩니다.

그런데 where 이하에서 문자열을 검색할 때에도 '를 사용하게 되는데

그렇게 되면 처음의 문자열로 만드는 따옴표와 뒤에 검색어를 사용하기 위해

사용한 따옴표 사이는 하나의 문자열이 되면서 문자열의 종결이 일어납니다.

그렇게 되면 틀린 구문이 되겠지요.

 

asp에서도 따옴표가 있는 문장이면 ''을 두개로 하여 변환(replace)했을 겁니다.

그와 마찬가지로 procedure에서 ''로 처리하는 것이랍니다.

SET @v_strSQL = 'SELECT * FROM ' + @v_tblname + ' WHERE title_id = ''' + @v_title_id + ''''

문장에서 title_id = ''' <- 는 처음 '' <- 는 ' 하나를 replace시킨셈이고

마지막 '는 'select 의 따옴표와 매치되어 문자열의 종결을 나태내는 것입니다.

그리고 @v_title_id + ''''에서는

처음 '는 'Select의 따옴표처럼 문자열의 시작을 말하는 것이고

'' <- 는 '의 replace, 그리고 마지막  ' <- 는 문자열의 종결을 나타냅니다.

 

다시 설명을 드리면 원래의 구문은 이렇게 될것입니다.

SELECT * FROM table_name WHERE title_id = 'id'

이것을 그대로 다시 표현하면

SELECT * FROM table_name WHERE title_id = ''id''

그런데 이게 또 하나의 변수로 묶여 문자열로 처리되고 있으므로

@str = 'select * from table_name where title_id = ''' + @id + ''''

이렇게 되겠네요.

 

여리님이 2004-12-23 14:28에 작성한 댓글입니다.
이 댓글은 2004-12-23 14:34에 마지막으로 수정되었습니다. Edit

고맙습니다..^^

덕분에 알게 되었네요...

김진옥(trueoak)님이 2004-12-24 12:49에 작성한 댓글입니다.
이 댓글은 2004-12-24 12:49에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
1717sql2000 dev 윈xp pro sp2설치에러
상윤이
2004-12-25
2791
1716키가 없는 테이블의 트리거
schan, An
2004-12-24
2915
1715[질문]MSSQL-인터넷 연결이 잘안됩니다.
happy
2004-12-24
4260
1714프로시저에서 문자열처리 따옴표 사용 [2]
김진옥
2004-12-23
10612
1713강좌에서 한글처리 관련 궁금한것이 있습니다.
유라
2004-12-22
2888
1712ms-sql을 쓰는데요 디비로그파일을 생성하지 않을 방법은 없나요..ㅡ,.ㅡ;; [1]
jins
2004-12-21
3073
1711테이블의 컬럼명만 가져오기? [1]
또초~!
2004-12-21
3471
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다