【发布时间】:2021-07-29 22:01:16
【问题描述】:
我在 SQL 语句方面不是很有经验,我正在尝试结合几个语句来减少到数据库的流量。(并确保中间不会发生其他操作)...
我有两张桌子:
表:R_LOTS
a.o. 2 列:PK_R_LOT 和 LOTCODE
表:R_LOTTRACKING
列:FK_R_LOT、TIMESTAMP、FK_MAGLOCATIES
我用的语句:
INSERT INTO R_LOTTRACKING (FK_R_LOT,TIMESTAMP,FK_MAGLOCATIES) VALUES (?,CURRENT_TIMESTAMP,?).
我可以在问号上填写要发送的值。
但是,您可以想象,我没有 FK_R_LOT,但我有(R_LOT 的)LOTCODE。当然,我可以通过单独的SELECT PK_R_LOT FROM R_LOT WHERE LOTCODE=?; 获得 FK_R_LOT,但是有没有办法将这些语句结合起来?
我看过一些示例,但所有信息似乎都来自 R_LOT 表,但我找不到 VALUES 和 SELECT 的组合。
总结:
我知道:LOTCODE 和 FK_MAGLOCATIES
如何组合语句插入行:
INSERT INTO R_LOTTRACKING (FK_R_LOT,TIMESTAMP,FK_MAGLOCATIES) VALUES (?,CURRENT_TIMESTAMP,?)
SELECT PK_R_LOT FROM R_LOT WHERE LOTCODE=?
【问题讨论】:
-
请标记您真正使用的RDBMS,并且仅请标记该RDBMS。
-
如果您正在使用 SQL Server,则将
CURRENT_TIMESTAMP的值插入您的TIMESTAMP列没有任何意义;timestamp是rowversion的(已弃用)同义词,是binary值,不是日期和时间值。 -
@Larnu,对不起。我在这里有点新。我的标签首先被拒绝...我正在使用 MSSQL 服务器。 CURRENT_TIMESTAMP 给了我数据库中的当前日期和时间。我仍然可以更改此列的名称,但使用它是否存在真正的问题?
-
那么,就像我提到的,上面的似乎是错误的。您不能将值插入
timestamp列; SQL Server 控制rowversion的值。 -
如有必要,我将修复时间戳列,但它正在工作。但是,如果更好,我会改变它..