Объявите переменную в sqlite и используйте ее
Я хочу объявить переменную в sqlite и использовать ее в операции вставки
как в MS SQL
Declare @name as varchar(10)
set name = 'name'
Select * from table where name = @name
например, мне нужно будет получить last_insert_row и использовать его в insert
Я нашел что-то о привязке, но я не полностью понял
4 ответа:
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;
решение Германа работает, но его можно упростить, потому что Sqlite позволяет хранить любой тип значения в любом поле.
вот более простая версия, которая использует один
решение Германа сработало для меня, но
...
меня немного перепутали. Я включаю демо, которое я разработал на основе его ответа. Дополнительные функции в моем ответе включают поддержку внешнего ключа, автоматическое увеличение ключей и использование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;
попробуйте использовать значения привязки. Вы не можете использовать переменные, как в T-SQL, но вы можете использовать "параметры". Я надеюсь, что следующая ссылка полезна.Значения Привязки