문제

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에서 매개 변수화 된 쿼리를 사용하면 세 가지 장점이 있습니다.

  1. SQL 주입 공격을 방지합니다.
  2. 당신은 걱정할 필요가 없습니다.
  3. 매개 변수를 사용할 때 SQLITE가 모든 SQL 문을 재구성 할 필요가 없기 때문에 더 빠릅니다. (성능 예제는이 링크를 참조하십시오 SQLITE 및 C#의 "" "문제를 어떻게 해결합니까? ).
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top