【问题标题】:sql insert errorsql插入错误
【发布时间】:2010-06-02 14:53:31
【问题描述】:

这是我的插入语句

INSERT INTO ProductStore (ProductID, StoreID, CreatedOn)
(SELECT DISTINCT(ProductId), 1, GETDATE() FROM ProductCategory
WHERE EXISTS (SELECT StoreID, EntityID FROM EntityStore
WHERE EntityType = 'Category' AND ProductCategory.CategoryID = EntityStore.EntityID AND StoreID = 1))

我正在尝试插入表 ProductStore,所有映射到类别的产品都映射到存储 1。列 StoreID 肯定可以有多个具有相同条目的行。我收到以下错误:违反主键约束...

但是,以下查询确实有效:

    INSERT INTO ProductStore (ProductID, StoreID, CreatedOn)
VALUES (2293,1,GETDATE()),(2294,1,GETDATE())

显然,ProductID 列试图多次插入相同的列。

您发现我的查询有什么问题吗?

TIA

【问题讨论】:

    标签: sql select insert primary-key


    【解决方案1】:

    我没有看到该查询的任何部分排除了表中已有的记录。

    【讨论】:

      【解决方案2】:

      取出INSERT INTO 语句并运行SELECT - 您应该能够很快发现重复的位置。

      我的猜测是您对SELECT DISTINCT 的实际作用略有误解,这一点可以从ProductId 周围的括号中得到证明。 SELECT DISTINCT 仅在 选择列表中的所有列 相同时保证消除重复项。在这种情况下,它不能保证每个ProductId 只能获得一行。

      【讨论】:

      • 那么我如何为每个产品 ID 获得 1 行?我尝试了 group by,它在 select 中有效,但仍然出现相同的错误
      【解决方案3】:

      select distinct productid 正在选择现有 ID,因此违反了您的主键约束。 为什么不使用标识增量创建主键?在这种情况下,您无需担心 ID 本身,它会为您生成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-28
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        • 2016-12-14
        相关资源
        最近更新 更多