请在将此标记为重复之前阅读该问题。
我试图在一个包含5列的表中插入一行。我希望其中3个列来自另一个表,我将使用select查询读取。
INSERT INTO tbl.Log (
LogDate,
Object,
Count,
Creator,
LastUpdate)
SELECT TOP 1
GETUTCDATE(),
Object,
Count, -- I need to +1 to this
'John Smith',
LastUpdate
FROM tbl.Objects
WHERE ObjectID = '123'
ORDER BY LastUpdate DESC
我可以在这里看到我做错了什么:
GETUTCDATE()
不应该进入SELECT,因为它不是列名。它在哪里呢?'John Smith'
作为创作者我可以通过执行两个单独的查询并将SELECT
中的数据解析为INSERT
查询来手动执行此操作,但我正在尝试改进我的SQL。
答案 0 :(得分:4)
您可以选择不属于表格的值,并在insert
期间对列进行算术运算。
INSERT INTO tbl.Log (
LogDate,
Object,
Count,
Creator,
LastUpdate)
SELECT TOP 1
GETUTCDATE(),
Object,
Count+1
'John Smith',
LastUpdate
FROM tbl.Objects
WHERE ObjectID = '123'
ORDER BY LastUpdate DESC
了解使用两个单独的查询执行insert
的想法会导致2行。
答案 1 :(得分:1)
选择表中不存在的值没有任何问题,每个RDBMS都接受它。
另外,算数+ 1是什么意思?日志表中的计数?如果是这样的话:
INSERT INTO tbl.Log (
LogDate,
Object,
Count,
Creator,
LastUpdate)
SELECT TOP 1
GETUTCDATE(),
Object,
(SELECT MAX(Count) FROM tbl.log),
'John Smith',
LastUpdate
FROM tbl.Objects
WHERE ObjectID = '123'
ORDER BY LastUpdate DESC
如果您的意思是Objects
表上的计数,则用count+1
替换子选择,但这似乎就是您可以自己完成的。