我想使用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失败。
答案 0 :(得分:2)
如果表包含数据,但column6为空(null),则必须使用update命令
update table1 set column6 = substring(column1,1,3)
使用存储在table1中的数据并更新column6
答案 1 :(得分:1)
insert
和update
语句之间存在根本区别 - 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