[SQL] SQLite는에 변수를 선언하고 사용
SQLSQLite는에 변수를 선언하고 사용
나는 SQLite는의 변수를 선언 할 및 삽입 작업에 사용합니다.
MS SQL에서와 마찬가지로 :
declare @name as varchar(10)
set name = 'name'
select * from table where name = @name
예를 들어, 나는 LAST_INSERT_ROWID 얻고 삽입에서 사용해야합니다.
나는 바인딩에 대해 뭔가를 발견하지만 난 정말 완전히 이해하지 않았다.
해결법
-
==============================
1.SQLite는 네이티브 변수 구문을 지원하지 않지만, 당신은 메모리 임시 테이블을 사용하여 거의 동일한 달성 할 수있다.
SQLite는 네이티브 변수 구문을 지원하지 않지만, 당신은 메모리 임시 테이블을 사용하여 거의 동일한 달성 할 수있다.
나는 마법 같은 대규모 프로젝트와 작품에 대한 아래의 방법을 사용했습니다.
/* Create in-memory temp table for variables */ BEGIN; PRAGMA temp_store = 2; CREATE TEMP TABLE _Variables(Name TEXT PRIMARY KEY, RealValue REAL, IntegerValue INTEGER, BlobValue BLOB, TextValue TEXT); /* Declaring a variable */ INSERT INTO _Variables (Name) VALUES ('VariableName'); /* Assigning a variable (pick the right storage class) */ UPDATE _Variables SET IntegerValue = ... WHERE Name = 'VariableName'; /* Getting variable value (use within expression) */ ... (SELECT coalesce(RealValue, IntegerValue, BlobValue, TextValue) FROM _Variables WHERE Name = 'VariableName' LIMIT 1) ... DROP TABLE _Variables; END;
-
==============================
2.허먼의 솔루션은 작동하지만, SQLite는 어떤 필드에 모든 값 유형을 저장할 수 있기 때문에 간단하게 할 수 있습니다.
허먼의 솔루션은 작동하지만, SQLite는 어떤 필드에 모든 값 유형을 저장할 수 있기 때문에 간단하게 할 수 있습니다.
여기에 사용하는 하나 개의 값 필드에 값을 저장하기 위해 텍스트로 선언하는 간단한 버전입니다 :
CREATE TEMP TABLE IF NOT EXISTS Variables (Name TEXT PRIMARY KEY, Value TEXT); INSERT OR REPLACE INTO Variables VALUES ('VarStr', 'Val1'); INSERT OR REPLACE INTO Variables VALUES ('VarInt', 123); INSERT OR REPLACE INTO Variables VALUES ('VarBlob', x'12345678'); SELECT Value FROM Variables WHERE Name = 'VarStr' UNION ALL SELECT Value FROM Variables WHERE Name = 'VarInt' UNION ALL SELECT Value FROM Variables WHERE Name = 'VarBlob';
-
==============================
3.(이다, 상수 값 한 번 세트와 쿼리에 사용 어디서나) 읽기 전용 변수의 경우, 공통 테이블 식 (CTE)를 사용합니다.
(이다, 상수 값 한 번 세트와 쿼리에 사용 어디서나) 읽기 전용 변수의 경우, 공통 테이블 식 (CTE)를 사용합니다.
WITH const AS (SELECT 'name' AS name, 10 AS more) SELECT table.cost, (table.cost + const.more) AS newCost FROM table, const WHERE table.name = const.name
SQLite는 함께 절
-
==============================
4.허먼의 솔루션은 나를 위해 일하지만,이 ... 나 조금 혼합했다. 나는 그의 대답에 따라 흥분 데모를 포함하고 있습니다. 내 대답에 추가 기능은 외래 키 지원, 자동 증가 키와 LAST_INSERT_ROWID () 함수의 사용 트랜잭션의 마지막 자동 생성 된 키를 얻을 수를 포함한다.
허먼의 솔루션은 나를 위해 일하지만,이 ... 나 조금 혼합했다. 나는 그의 대답에 따라 흥분 데모를 포함하고 있습니다. 내 대답에 추가 기능은 외래 키 지원, 자동 증가 키와 LAST_INSERT_ROWID () 함수의 사용 트랜잭션의 마지막 자동 생성 된 키를 얻을 수를 포함한다.
나는 세 개의 외래 키를 필요로하는 트랜잭션을 명중 할 때이 정보에 대한 나의 필요를 내놓았다하지만 난 단지 LAST_INSERT_ROWID와 마지막 ()을 얻을 수 있습니다.
PRAGMA foreign_keys = ON; -- sqlite foreign key support is off by default PRAGMA temp_store = 2; -- store temp table in memory, not on disk CREATE TABLE Foo( Thing1 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ); CREATE TABLE Bar( Thing2 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, FOREIGN KEY(Thing2) REFERENCES Foo(Thing1) ); BEGIN TRANSACTION; CREATE TEMP TABLE _Variables(Key TEXT, Value INTEGER); INSERT INTO Foo(Thing1) VALUES(2); INSERT INTO _Variables(Key, Value) VALUES('FooThing', last_insert_rowid()); INSERT INTO Bar(Thing2) VALUES((SELECT Value FROM _Variables WHERE Key = 'FooThing')); DROP TABLE _Variables; END TRANSACTION;
-
==============================
5.바인딩 값을 사용해보십시오. 당신이 T-SQL에서와 같이 변수를 사용할 수 있지만 "매개 변수"를 사용할 수 있습니다. 나는 다음과 같은 링크 값을 usefull.Binding 희망
바인딩 값을 사용해보십시오. 당신이 T-SQL에서와 같이 변수를 사용할 수 있지만 "매개 변수"를 사용할 수 있습니다. 나는 다음과 같은 링크 값을 usefull.Binding 희망
from https://stackoverflow.com/questions/7739444/declare-variable-in-sqlite-and-use-it by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 데이터베이스에서 단순 무작위 샘플 (0) | 2020.03.29 |
---|---|
[SQL] 그것은 재귀 SQL 쿼리를 만들 수 있습니까? (0) | 2020.03.29 |
[SQL] SQL 서버 : 적절한 케이스 / 타이틀 케이스에 모든 UPPER 사례를 확인 (0) | 2020.03.29 |
[SQL] COUNTIF 집계 함수의 SQL 서버에 해당 (0) | 2020.03.29 |
[SQL] 어떻게 엑셀 테이블에 SQL 쿼리를 실행하려면? (0) | 2020.03.29 |