簡體   English   中英

T-SQL查詢以從一個表中選擇並插入到另一個表中

[英]T-SQL query to select from one table and insert into another

在將此問題標記為重復之前,請先閱讀問題。

我試圖將行插入到具有5列的表中。 我希望其中三列來自另一個表,我將使用選擇查詢來讀取該表。

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列是一個整數; 我需要先讀取現有號碼,然后再添加一個。

我可以通過執行兩個單獨的查詢並將SELECT的數據解析為INSERT查詢來手動完成此操作,但是我正在嘗試改進SQL。

您可以選擇不屬於表的值,並在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的想法將導致兩行。

選擇表中不存在的值沒有錯,每個RDBMS都接受它。

另外,count + 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替換子選擇,但這似乎可以自己完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM