INSERT INTO表需要加入

时间:2012-06-22 11:29:02

标签: sql sql-server join insert-into

我目前正在尝试将数据从一个表移动到另一个表。在previous question I asked today中,我被建议使用插入语句。在尝试运行该语句时,我从SQL Server收到错误,如下所示:

  

无法将值NULL插入列'Parent',表'***** .dbo.Product';列不允许空值。 INSERT失败。

这是我创建的声明,

BEGIN TRANSACTION
INSERT INTO [*****].[dbo].[Product] 
([PDate]
  ,[SDate]
  ,[CreatedBy]
  ,[CreatedDate]
  ,[UpdatedBy]
  ,[UpdatedDate])
SELECT d.[PDate]
  ,d.[SDate]
  ,d.[CreatedBy]
  ,d.[CreatedDate]
  ,d.[UpdatedBy]
  ,d.[UpdatedDate]
FROM [*****].[dbo].[ProductData] AS d
JOIN [*****].[dbo].[Product] AS t
ON d.ProductDataID = t.ProductDataID
ROLLBACK TRANSACTION

我需要确保数据正确匹配

编辑:抱歉,我在复制脚本时出错了。 UseDRM位于我原始脚本的两个部分中。 我想要做的是将ProductData表中的数据复制到Product表。

4 个答案:

答案 0 :(得分:3)

Parent列不可为空且没有默认值,因此您需要将其添加到查询中。

答案 1 :(得分:2)

尝试在选择查询时使用ISNULL来检查值是否为空&将其替换为默认值。

例如:

   BEGIN TRANSACTION
    INSERT INTO [*****].[dbo].[Product] 
    ([PDate]
      ,[SDate]
      ,[UseDRM]
      ,[CreatedBy]
      ,[CreatedDate]
      ,[UpdatedBy]
      ,[UpdatedDate])
    SELECT Isnull(d.[PDate], '1/1/1900')
      ,Isnull(d.[SDate], '1/1/1900')
      ,Isnull(d.[UseDRM], "")
      ,Isnull(d.[CreatedBy], "")
      ,Isnull(d.[CreatedDate], '1/1/1900')
      ,Isnull(d.[UpdatedBy], "")
      ,Isnull(d.[UpdatedDate], '1/1/1900')
    FROM [*****].[dbo].[ProductData] AS d
    JOIN [*****].[dbo].[Product] AS t
    ON d.ProductDataID = t.ProductDataID
    ROLLBACK TRANSACTION

答案 2 :(得分:2)

BEGIN TRANSACTION
INSERT INTO [*****].[dbo].[Product] 
([PDate]
  ,[SDate]//Check Columns no here it is  6 total
  ,[CreatedBy]
  ,[CreatedDate]
  ,[UpdatedBy]
  ,[UpdatedDate])
SELECT d.[PDate] //Check columns numbers here it is 7 here 
  ,d.[SDate]
  ,d.[UseDRM]
  ,d.[CreatedBy] 
  ,d.[CreatedDate]
  ,d.[UpdatedBy]
  ,d.[UpdatedDate]
FROM [*****].[dbo].[ProductData] AS d
JOIN [*****].[dbo].[Product] AS t
ON d.ProductDataID = t.ProductDataID
ROLLBACK TRANSACTION

更正它然后就可以了d.[UseDRM]不在插入

答案 3 :(得分:0)

我终于弄清楚我做错了什么,而不是使用INSERT INTO语句我应该使用UPDATE语句

UPDATE [********].[dbo].[Product] 
SET [PDate] = [********].[dbo].[ProductData].[PDate]
  ,[SDate] = [********].[dbo].[ProductData].[SDate]
  ,[CreatedBy] = [********].[dbo].[ProductData].[CreatedBy]
  ,[CreatedDate] = [********].[dbo].[ProductData].[CreatedDate]
  ,[UpdatedBy] = [********].[dbo].[ProductData].[UpdatedBy]
  ,[UpdatedDate] = [********].[dbo].[ProductData].[UpdatedDate]
FROM [********].[dbo].[ProductData], [********].[dbo].[Product]
WHERE [********].[dbo].[Product].[ProductDataID] = [********].[dbo].[ProductData].[ProductDataID]

我为我写的写得不好的问题道歉