使用同一表中的子字符串将SQL插入失败

使用同一表中的子字符串将SQL插入失败,sql,sql-server,Sql,Sql Server,我想使用table1.column2中的子字符串创建流程,并将结果插入table1.column6。我正在尝试下面的查询,但插入失败。它尝试插入另一列column1,即id列。我指定了第6列,但它不起作用 Insert into table1(column6) Select substring(column1,1,3) from table1 错误: Msg 515,16级,状态2,第1行 无法将值NULL插入到表“dbo.table1”的列“Column1ID”中;列不允许空值。

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

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

Msg 515,16级,状态2,第1行 无法将值NULL插入到表“dbo.table1”的列“Column1ID”中;列不允许空值。插入失败


insert语句和update语句之间有一个根本的区别——insert创建一个全新的行,而update更新一个已经存在的行,即使该行的特定列中的数据还不存在

-我知道您是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中,列1中为null,子字符串值放入列6中。请注意,这将失败,因为您正在尝试将column1值为null的行插入table1中的不可为null的列中

您可能真正想要的是:

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

在本例中,它将更新表中所有将column6s值设置为column1的子字符串值的行。如果表中包含数据,但column6为空,则必须使用update命令

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

使用存储在表1和更新列6中的数据,我认为您正在尝试更新表。使用ISNULL可以避免空值

 UPDATE table1 SET column6 = ISNULL(SUBSTRING(column1,1,3), '')
如果你坚持插入。请检查除Column6之外的所有列是否接受null。查询将插入大量数据

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

请检查table1 column6的定义,并检查它是否允许空值。错误非常清楚。你在提交之前研究过吗?我知道我现在犯了什么错误。我尝试了更新,它成功了。