【问题标题】:INSERT SELECT statement with only one column for SELECTINSERT SELECT 语句只有一列用于 SELECT
【发布时间】:2020-07-22 16:36:52
【问题描述】:

我正在使用 SQL Server Management Studio 18,并且我有以下表格,其中包含以下列:

表A

[ID]
[Name]
[InternalEmplID]

表B

[ID]
[InternalEmplID]
[Month]
[Year]

我想在 TableB 中创建一个INSERT SELECT,可能类似于以下内容:

INSERT INTO TableB
(InternalEmplID, Month, Year)
VALUES
((SELECT InternalEmplIDFROM TableA WHERE Name = 'John Smith'), 'July', '2020')

基本上,我只想创建一个INSERT SELECT,在其中我从另一个表(InternalEmplID)中获取一列,然后对于其他列(MonthYear),我想添加不依赖于另一个表中的列/数据的数据。这可能吗?我对INSERT SELECT 不太熟悉,所以这对我来说是全新的。

【问题讨论】:

  • 您不能以任何语法编写 SQL 并期望 SQL Server 能够理解并运行它。您的语法绝对无效。请阅读 MSDN 文档。

标签: sql sql-server database select sql-insert


【解决方案1】:

如果select 返回多行,如果您的查询将失败。更灵活的选择是使用INSERT ... SELECT 语法并在附加列中提供文字值:

INSERT INTO TableB (InternalEmplID, Month, Year)
SELECT InternalEmplIDFROM, 'July', '2020' TableA WHERE Name = 'John Smith'

【讨论】:

  • 谢谢——你提出了一个很好的观点。我还在考虑是否有可能在我编写那个模拟 SQL 查询时遇到任何最终会出现多个选定行的情况。您是否也可以在SELECT 中加入TOP(1)
  • @LOL.NO.:使用这种语法,select 部分可以是任何有效的选择语句。所以你可以使用top,如果那是你真正想要的。
【解决方案2】:

你已经很接近了......简单地做

INSERT INTO TableB (
    InternalEmplID, Month, Year
)
SELECT
    InternalEmplID, 'July', '2020'
FROM
    TableA
WHERE
    Name = 'John Smith'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2012-10-18
    • 2010-11-09
    相关资源
    最近更新 更多