sqlite : 하나의 치환으로 이전 행에서 모든 값을 복사하십시오.
문제
SQLITE를 사용하여 테이블에서 거의 모든 기존 행을 복사하고 단일 열로 변경하고 새 행을 테이블에 삽입해야합니다. 대략 좋아하는 것
INSERT INTO $tablename (c1, c2, ... , cn)
SELECT (c1, c2, ... , cn) FROM $tablenam
일부 값 CI를 선택 열 목록으로 대체하려고 시도했습니다. 이것은 값이 플로트 또는 정수 인 경우 작동하지만 문자열 인 경우에는 작동하지 않습니다. 값이 문자열 인 경우 Sqlite는 자연스럽게 존재하지 않는 열 이름으로 해석하고 오류가 발생합니다.
이 작업을 수행하기 위해 코드를 작성할 수 있지만 한 쿼리로 수행하기를 바랐습니다.
관련성이 있다면 현재 TCL에서 코딩하고 있습니다.
감사,
숀
해결책
이것이 작동하지 않는다는 것을 의미합니까?
INSERT INTO $tablename (c1, c2, ... , cn)
SELECT (c1, c2, ..., "othervalue", ... , cn) FROM $tablename
쿼리를 어떻게 구성하고 있습니까?
pseudocode 예 : 이것은 다른 값이 columnName으로 해석되므로 작동하지 않습니다.
dothquery("INSERT INTO $tablename (c1, c2, ... , cn)
SELECT (c1, c2, ..., othervalue, ... , cn) FROM $tablename")
이것이 작동하는 동안 "
기타 값 주위는 이스케이프 형식에 포함 된 다음 sqllite는 더 이상 columnName으로 표현식으로 인식해야합니다.
dothquery("INSERT INTO $tablename (c1, c2, ... , cn)
SELECT (c1, c2, ..., \"othervalue\", ... , cn) FROM $tablename")
다른 팁
문자열을 둘러싸고 있는지 확인하십시오 'singlequotes'
. 나는 그들이 두 배의 쿼리보다 SQL 쿼리로 문자열을 인용하는 데 더 잘 작동한다는 것을 알았습니다. 그들이 탈출했는지 확인하십시오.
TCL이 매개 변수화 된 쿼리를 지원하는지 여부는 모르겠습니다. sqlite에서 매개 변수화 된 쿼리를 사용하면 세 가지 장점이 있습니다.
- SQL 주입 공격을 방지합니다.
- 당신은 걱정할 필요가 없습니다.
- 매개 변수를 사용할 때 SQLITE가 모든 SQL 문을 재구성 할 필요가 없기 때문에 더 빠릅니다. (성능 예제는이 링크를 참조하십시오 SQLITE 및 C#의 "" "문제를 어떻게 해결합니까? ).
제휴하지 않습니다 StackOverflow