我有两张表t1
和t2
。两者都有id
和name
列。 t1
的名称列定义为非空,其默认值为'彼得'。
我想将t2
中的所有值插入到我的t1
表中。但是我在t2
表中有一些空值。当我尝试插入值时:
Insert into t1
select *
from t2;
它抛出了这个错误:
Msg 515,Level 16,State 2,Line 1
无法将值NULL插入列'名称',表' T1&#39 ;;列不允许空值。
当我们尝试insert
null
值时,是否有可能将默认值设置为列。
答案 0 :(得分:6)
第一个解决方案,
insert into t1
select id,isnull(name,'Peter') from t2
第二个解决方案
ALTER TABLE T1 ALTER COLUMN name varchar(255) NULL
insert into t1
select id,name from t2
ALTER TABLE T1 ALTER COLUMN name varchar(255) NOT NULL
第三种解决方案:(最好)
Declare @GetDefaultValue varchar(255)
SELECT @GetDefaultValue= COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'T1'
AND COLUMN_NAME = 'name'
insert into t1 select id,isnull(name,@GetDefaultValue) from t2
答案 1 :(得分:2)
所以而不是
Insert into t1 select * from t2
您可以将查询重写为
Insert into t1
select col1,col2, ISNULL(name, 'Peter'), othercolumns from t2
答案 2 :(得分:2)
使用COALESCE
<强>查询强>
INSERT INTO t1(Id, Name)
SELECT Id, COALESCE(Name, 'Peter') FROM t2;
或者您可以使用CASE
表达式。
<强>查询强>
INSERT INTO t1(Id, Name)
SELECT Id, CASE WHEN Name IS NULL THEN 'Peter' ELSE Name END
FROM t2;
答案 3 :(得分:1)
修改您的查询,如:
window.onload = function(){
var addBtn = document.querySelectorAll(".add");
for(var i = 0; i < addBtn.length; i++){
addBtn[i].onclick = addTime;
}
};
function addTime(){
var update = parseInt(this.parentElement.getElementsByTagName("SPAN")[0].innerHTML) + 1;
var digits = this.parentElement.parentElement.querySelectorAll(".digit");
if(digits.indexOf(this.parentElement) % 2){ //Uncaught TypeError: digits.indexOf is not a function
}else{
carryOn(this, update);
}
}
有关详细信息,请参阅以下链接