消除sql中的错误

时间:2012-04-22 06:19:14

标签: sql-server

我在SQL Server中有一个查询:

insert into [Sha1]( 
       [IDTbl]
      ,[IDTbl_old]
      ,[IDold]
      ,[WordsAsl])
 (SELECT  [IDTbl]
      ,[IDTbl_old]
      ,[IDold]
      ,[WordsAsl]
  FROM [Sha2])

如何解决此错误:

  

无法将值NULL插入列'IDTbl',表'Sha1';柱   不允许空值。 INSERT失败。

2 个答案:

答案 0 :(得分:2)

除了排除SELECT中包含NULL的行之外的其他选项是使用ISNULL()函数提供默认值而不是NULL

 INSERT INTO dbo.Sha1(IDTbl, IDTbl_old, IDold, WordsAsl)
     SELECT  
        ISNULL(IDTbl, 42),
        IDTbl_old,
        IDold,
        WordsAsl
     FROM dbo.Sha2

我在此处规定,如果IDTbl的{​​{1}}值为dbo.Sha2,则NULL应该返回42(因此将此值插入SELECT而不是dbo.Sha1)。

答案 1 :(得分:1)

源表中的某些行必须包含NULL字段中的IDTbl

尝试:

 insert into [Sha1]( 
   [IDTbl]
  ,[IDTbl_old]
  ,[IDold]
  ,[WordsAsl])
SELECT  [IDTbl]
  ,[IDTbl_old]
  ,[IDold]
  ,[WordsAsl]
FROM [Sha2]
WHERE IDTbl IS NOT NULL

如果目标表中的其他列具有约束,您可能会发现需要使此WHERE子句更复杂。