【问题标题】:SQL Server: How to add values to a table from an other table? [duplicate]SQL Server:如何从另一个表向一个表添加值? [复制]
【发布时间】:2014-07-30 22:23:53
【问题描述】:

我是 SQL 新手,非常需要帮助。我有两个表:Fact_Hours 和 DatePeriod。 我需要将值插入 Fact_Hours 表中的 YYYYMM 列。值来自 DatePeriod 表。 这是我想出的代码,但它不起作用。我收到多个错误。

INSERT INTO [dbo].[Fact_Hours]([YYYYMM])
 VALUES (SELECT [YYYYMM]
            FROM [dbo].[DatePeriod] d
            WHERE [dbo].[Fact_Hours].[CDate] = d.[Date])

正确的 YYYYMM 值是与同一行中 Fact_Hours 表中的 CDate 具有相同日期的值。

非常感谢您的帮助!

【问题讨论】:

    标签: sql sql-server subquery sql-insert


    【解决方案1】:

    这是一个常见错误。 INSERT INTO with SELECT 不需要 VALUES 关键字

    INSERT INTO [dbo].[Fact_Hours]([YYYYMM])
    SELECT [YYYYMM]
                FROM [dbo].[DatePeriod] d
                WHERE [dbo].[Fact_Hours].[CDate] = d.[Date]
    

    但是 SELECT 查询需要加入 Fact_Hours 表,但我们不知道我们可以在哪些字段上建立两个表之间的关系。

    这是一个示例,假设两个表中都有一个列可用于名为 NameOfKeyColumn 的连接

    INSERT INTO [dbo].[Fact_Hours]([YYYYMM])
    SELECT [YYYYMM]
    FROM [dbo].[DatePeriod] d INNER JOIN [dbo].[Fact_Hours] f
         ON f.NameOfKeyColumn = d.NameOfKeyColumn
    WHERE [dbo].[Fact_Hours].[CDate] = d.[Date]
    

    【讨论】:

    • 感谢您的回答!我试过你的方法,我收到错误消息 The multi-part identifier "dbo.Fact_Hours.CDate" could not be bound.
    • 这是因为需要在select中加入Fact_Hours表
    • 我该怎么做?
    【解决方案2】:

    你可以试试这个

        INSERT INTO [dbo].[Fact_Hours]([YYYYMM])
        SELECT [YYYYMM]
        FROM [dbo].[DatePeriod] dp INNER JOIN [dbo].[Fact_Hours] fh
        ON fh.[CDate] = dp.[Date]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多