Sqliteman中的别名出现问题,试图创建唯一id´;s
我正在尝试将此函数从SQL server转换为Sqlite,我如何才能做到这一点?我知道这不一样,但我就是做不到。任何信息都会很棒。谢谢 代码如下:Sqliteman中的别名出现问题,试图创建唯一id´;s,sql,sqlite,Sql,Sqlite,我正在尝试将此函数从SQL server转换为Sqlite,我如何才能做到这一点?我知道这不一样,但我就是做不到。任何信息都会很棒。谢谢 代码如下: CREATE TABLE "user" ( "numId" INT IDENTITY(1,1) NOT NULL, "prefix" VARCHAR(50) NOT NULL, "id" AS ("prefix"+RIGHT('000000'+CAST(ID AS VARCHAR(7)),7))PERSISTED, 谢谢。
CREATE TABLE "user" (
"numId" INT IDENTITY(1,1) NOT NULL,
"prefix" VARCHAR(50) NOT NULL,
"id" AS ("prefix"+RIGHT('000000'+CAST(ID AS VARCHAR(7)),7))PERSISTED,
谢谢。将调用普通SQL表,并将唯一的整数作为主键(一列将此rowid命名为别名)。因此,
IDENTITY
位得到了处理
虽然Sqlite 3.31(在本文撰写时的beta版中)支持生成的列,但在具有该功能的版本在未来几年内广泛可用之前,您可以创建一个添加自定义前缀的版本,或者在每个重要的SELECT
中执行该操作。比如:
sqlite> CREATE TABLE actual_user(numId INTEGER PRIMARY KEY, prefix TEXT NOT NULL);
sqlite> CREATE VIEW user(numId, prefix, id) AS
...> SELECT numId, prefix, printf('%s%07d', prefix, numId) FROM actual_user;
sqlite> INSERT INTO actual_user(prefix) VALUES ('TEST'), ('TEST'), ('TESTX');
sqlite> SELECT * FROM user;
numId prefix id
---------- ---------- ------------
1 TEST TEST0000001
2 TEST TEST0000002
3 TESTX TESTX0000003
您还可以为表模拟触发器,在插入和更新时更新id
值。这更接近于模仿persist(存储在SQLite行话中)生成的列,而视图则模仿虚拟列:
sqlite> CREATE TABLE user(numId INTEGER PRIMARY KEY, prefix TEXT NOT NULL, id TEXT);
sqlite> CREATE TRIGGER user_ai AFTER INSERT ON user
...> BEGIN UPDATE user SET id = printf('%s%07d', new.prefix, new.numId) WHERE numId = new.numId; END;
sqlite> CREATE TRIGGER user_au AFTER UPDATE OF numId, prefix ON user
...> BEGIN UPDATE user SET id = printf('%s%07d', new.prefix, new.numId) WHERE numId = new.numId; END;
sqlite> INSERT INTO user(prefix) VALUES ('TEST');
sqlite> SELECT * FROM user;
numId prefix id
---------- ---------- ------------
1 TEST TEST0000001
sqlite> UPDATE user SET prefix='APPLE' WHERE numId = 1;
sqlite> SELECT * FROM user;
numId prefix id
---------- ---------- ------------
1 APPLE APPLE0000001
(1) 您的语法是SQL Server语法,因此它在SQLite中不起作用也就不足为奇了。(2) SQLite(还)不支持生成的列,因此您不能在该数据库中执行此操作。我如何才能在SQLite中对该代码执行相同的操作?谢谢。在SQLite中不能有这种类型的列。您可以做的是创建一个将返回计算列的查询。