Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqliteman中的别名出现问题,试图创建唯一id´;s_Sql_Sqlite - Fatal编程技术网

Sqliteman中的别名出现问题,试图创建唯一id´;s

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, 谢谢。

我正在尝试将此函数从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,

谢谢。

将调用普通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中不能有这种类型的列。您可以做的是创建一个将返回计算列的查询。