SQL插入失败使用来自同一个表的子字符串

时间:2014-11-13 14:02:55

标签: sql sql-server

我想使用substring中的table1.column2创建流程,并将结果插入table1.column6。我正在尝试下面的查询,但我的插入失败。它尝试插入另一列( column1 ),即id列。我指定 column6 但它不起作用。

Insert into table1(column6)
   Select substring(column1,1,3)
   from table1

错误:

  

Msg 515,Level 16,State 2,Line 1
  无法将值NULL插入列' Column1ID',table' dbo.table1&#39 ;;列不允许空值。 INSERT失败。

3 个答案:

答案 0 :(得分:2)

如果表包含数据,但column6为空(null),则必须使用update命令

update table1 set column6 = substring(column1,1,3)

使用存储在table1中的数据并更新column6

答案 1 :(得分:1)

insertupdate语句之间存在根本区别 - insert会创建一个全新的行,而update会更新已存在的行(即使某行的特定列中的数据确实存在尚不存在)

What are differences between INSERT and UPDATE in MySQL? - 我意识到你是sql server但同样的原则适用。

听起来您实际上可能正在尝试更新列值,而不是在列中插入带有值的新行。

鉴于以下表格和数据:

table1
----
Id int primary key identity(1,1)
column1 varchar(50) not null
column6 varchar(50) null

id    column1    column6
-----
1     some value    null
2     some other value    null

请注意,如果您要尝试查询:

insert into table1(column6) select substring(column1,1,3) from table1

这将尝试采取一些价值"和"其他一些价值"到新的第3行和第4行,在column1中为null,子串值为column6。请注意,这会失败,因为您尝试在不可为空的列中使用空值(column1)将行插入到table1中。

你(可能)实际想要的是:

update table1
set column6 = substring(column1,1,3)

更新表(在这种情况下为所有行)将column6s值设置为column1的子字符串值

答案 2 :(得分:1)

我认为您正在尝试更新该表。使用ISNULL避免空值。

 UPDATE table1 SET column6 = ISNULL(SUBSTRING(column1,1,3), '')

如果你坚持插入。检查除Column6之外的所有列是否接受null。而Query将插入大量数据。

Insert into table1(column6)
Select ISNULL(SUBSTRING(column1,1,3), '')
from table1