T-SQL查询从一个表中选择并插入另一个表

时间:2016-06-23 14:01:11

标签: sql tsql sql-server-2012

请在将此标记为重复之前阅读该问题。

我试图在一个包含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'作为创作者
  • 也是如此
  • Count列是一个int;我需要读取现有的数字并在插入之前添加一个。

我可以通过执行两个单独的查询并将SELECT中的数据解析为INSERT查询来手动执行此操作,但我正在尝试改进我的SQL。

2 个答案:

答案 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替换子选择,但这似乎就是您可以自己完成的。