使用同一表中的子字符串将SQL插入失败
我想使用table1.column2中的子字符串创建流程,并将结果插入table1.column6。我正在尝试下面的查询,但插入失败。它尝试插入另一列column1,即id列。我指定了第6列,但它不起作用使用同一表中的子字符串将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”中;列不允许空值。
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的定义,并检查它是否允许空值。错误非常清楚。你在提交之前研究过吗?我知道我现在犯了什么错误。我尝试了更新,它成功了。