SQL Server:如何从其他表中向表中添加值?

时间:2014-06-10 08:24:56

标签: sql sql-server subquery sql-insert

我是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具有相同日期的值。

我真的很感谢你的帮助!

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

你可以试试这个

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