SQLite - 在 SELECT INTO 语句上生成 GUID/UUID
SQLite - Generate GUID/UUID on SELECT INTO statement
我正在尝试为我的应用程序编写一些测试数据的脚本。
我试图填充的 table 有一列包含 UUID 的字符串类型。
我需要编写一个插入语句来填充此列。
我当前的语句几乎可以工作,但它为所有插入生成相同的 ID。生成的列不必是真正的 UUID,但需要在 table.
中是唯一的
我的陈述的简化版本如下所示:
SELECT
null as id,
whi.externalId,
(select lower(hex( randomblob(4)) || '-' || hex( randomblob(2))
|| '-' || '4' || substr( hex( randomblob(2)), 2) || '-'
|| substr('AB89', 1 + (abs(random()) % 4) , 1) ||
substr(hex(randomblob(2)), 2) || '-' || hex(randomblob(6)))) as GUID
FROM WorkHerdInventories as whi
结果如下:
可能 SQLite 试图优化代码,因此它只执行一次子查询并且 returns 对所有行执行相同的 UUID
。
删除用于获取 UUID
的 SELECT
语句(反正你不需要它):
SELECT
null id,
externalId,
lower(
hex(randomblob(4)) || '-' || hex(randomblob(2)) || '-' || '4' ||
substr(hex( randomblob(2)), 2) || '-' ||
substr('AB89', 1 + (abs(random()) % 4) , 1) ||
substr(hex(randomblob(2)), 2) || '-' ||
hex(randomblob(6))
) GUID
FROM WorkHerdInventories
参见demo。
结果:
id | externalId | GUID
---- | ---------- | ------------------------------------
null | 78 | 55ad2d25-12b7-4a29-b538-41384cc25b84
null | 79 | d9f49c6a-7627-4e75-a494-987434dea7a2
null | 80 | f87feaa3-2dad-43fd-97e5-77353b289799
null | 81 | ff9557e9-3ab4-4423-b92d-e6c0b92620f7
null | 82 | 4558a483-bd25-45c9-8ffa-eae8168fc8fb
null | 83 | 9491bbcd-311d-4c64-8418-da522f9201a6
null | 84 | 8ac52122-b9ae-40fb-b4c6-7c83238ae8d5
我正在尝试为我的应用程序编写一些测试数据的脚本。 我试图填充的 table 有一列包含 UUID 的字符串类型。 我需要编写一个插入语句来填充此列。
我当前的语句几乎可以工作,但它为所有插入生成相同的 ID。生成的列不必是真正的 UUID,但需要在 table.
中是唯一的我的陈述的简化版本如下所示:
SELECT
null as id,
whi.externalId,
(select lower(hex( randomblob(4)) || '-' || hex( randomblob(2))
|| '-' || '4' || substr( hex( randomblob(2)), 2) || '-'
|| substr('AB89', 1 + (abs(random()) % 4) , 1) ||
substr(hex(randomblob(2)), 2) || '-' || hex(randomblob(6)))) as GUID
FROM WorkHerdInventories as whi
结果如下:
可能 SQLite 试图优化代码,因此它只执行一次子查询并且 returns 对所有行执行相同的 UUID
。
删除用于获取 UUID
的 SELECT
语句(反正你不需要它):
SELECT
null id,
externalId,
lower(
hex(randomblob(4)) || '-' || hex(randomblob(2)) || '-' || '4' ||
substr(hex( randomblob(2)), 2) || '-' ||
substr('AB89', 1 + (abs(random()) % 4) , 1) ||
substr(hex(randomblob(2)), 2) || '-' ||
hex(randomblob(6))
) GUID
FROM WorkHerdInventories
参见demo。
结果:
id | externalId | GUID
---- | ---------- | ------------------------------------
null | 78 | 55ad2d25-12b7-4a29-b538-41384cc25b84
null | 79 | d9f49c6a-7627-4e75-a494-987434dea7a2
null | 80 | f87feaa3-2dad-43fd-97e5-77353b289799
null | 81 | ff9557e9-3ab4-4423-b92d-e6c0b92620f7
null | 82 | 4558a483-bd25-45c9-8ffa-eae8168fc8fb
null | 83 | 9491bbcd-311d-4c64-8418-da522f9201a6
null | 84 | 8ac52122-b9ae-40fb-b4c6-7c83238ae8d5