INSERT SELECT 语句只有一列用于 SELECT

Posted

技术标签:

【中文标题】INSERT SELECT 语句只有一列用于 SELECT【英文标题】:INSERT SELECT statement with only one column for 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 文档。 【参考方案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'

【讨论】:

以上是关于INSERT SELECT 语句只有一列用于 SELECT的主要内容,如果未能解决你的问题,请参考以下文章

准备好的语句适用于 INSERT 但不适用于 SELECT

数据库子查询 含义-分类-语句

在 INSERT SELECT 语句期间生成增量数值列值

SQL server select语句用于选择另一列的重复条目的ID

请教高手oracle 创建了索引后在使用SELECT,UPDATE,DELETE和INSERT语句时性能影响上有啥不同?

insert语句返回值