1

我在 SQL Server 中有一个查询:

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

如何解决此错误:

无法将值 NULL 插入到列“IDTbl”、表“Sha1”中;列不允许空值。插入失败。

4

2 回答 2

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来自dbo.Sha2be的值NULL,那么SELECT应该返回 42 (并因此将这个值插入dbo.Sha1而不是NULL)。

于 2012-04-22T07:39:26.653 回答
1

源表中的某些行必须包含NULLIDTbl字段中。

尝试:

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

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

于 2012-04-22T06:26:35.140 回答