sql语句添加一列并且设置默认值为0

时间:2020-12-01 09:53:06
我用游标动态添加列并且设置默认值,不过好像直接写default 0是不行的,查询出来没有值的还是为空,没有显示0
下面是修改列的一句代码。。
  ALTER TABLE #Temp Add ['+Cast(Day(@Date) As varchar)+'_发出] int default 0

请问要怎么样设置默认值??

8 个解决方案

#1


你那个设置是插入的时候默认是0,再读取
你直接读取肯定没数据了

#2


CREATE TABLE tb(ID INT,data varchar(10))

DECLARE @SQL VARCHAR(1000)

SET @SQL='ALTER TABLE tb ADD ['+CAST(DAY(GETDATE()) AS VARCHAR)+'_发出] INT DEFAULT 0'
EXEC(@SQL)

INSERT tb(id,data) VALUES(1,'aa')

SELECT * FROM tb

DROP TABLE tb

#3


引用 2 楼 liangCK 的回复:
SQL codeCREATE TABLE tb(ID INT,data varchar(10))

DECLARE @SQL VARCHAR(1000)

SET @SQL='ALTER TABLE tb ADD ['+CAST(DAY(GETDATE()) AS VARCHAR)+'_发出] INT DEFAULT 0'
EXEC(@SQL)

INSERT tb(id,data) VALUES(1,'aa')

SELECT * FROM tb

DROP TABLE tb


貌似你这跟我说的没什么区别呀。
我这样插入列后是要动态更新这列的数据的(从别的表里取值,有好几个表连接的,如果取值为空的话就为0),并不是直接插入值
不知道怎么样设置默认值。。开始我也以为这样设置可以,but in fact ,not..

#4


insert #temp(f1,f2) select isnull(f1,0),isnull(f2,0) from otherTable

#5


引用 3 楼 fwqkey 的回复:
引用 2 楼 liangCK 的回复:
SQL codeCREATE TABLE tb(ID INT,data varchar(10)) 

DECLARE @SQL VARCHAR(1000) 

SET @SQL='ALTER TABLE tb ADD ['+CAST(DAY(GETDATE()) AS VARCHAR)+'_发出] INT DEFAULT 0' 
EXEC(@SQL) 

INSERT tb(id,data) VALUES(1,'aa') 

SELECT * FROM tb 

DROP TABLE tb 
 

貌似你这跟我说的没什么区别呀。 
我这样插入列后是要动态更新这列的数据的(从别的表里取值,有好几个表连接…


这样就是设置是默认值..

而你说到的从另的表里.几个表的连接..如果你得到的是为空(NULL)..
那就说你已经显式的把NULL插入到列当中了..
都已经把值插入到列当中了.还谈什么默认值.

#6


如果就是用ISNULL()去判断是否为NULL,是就取0的话.那把我的话都忽略掉吧.

#7


数据已存在是不能这样用

加上with values就行了
use tempdb
go
create table #Temp(ID int)
insert #Temp select 1
insert #Temp select 2
go
declare @Date datetime,@s nvarchar(1000)
set @Date=getdate()
set @s='ALTER TABLE #Temp Add ['+Cast(Day(@Date) As varchar)+'_发出] int default 0 with values'--加上with values
exec(@s)

select * from #Temp
/*
ID          26_发出
----------- -----------
1           0
2           0

(2 行受影响)


*/


#8


當你再插入數據是就將它設置為0,
但是你查看以前值依舊是null。

#1


你那个设置是插入的时候默认是0,再读取
你直接读取肯定没数据了

#2


CREATE TABLE tb(ID INT,data varchar(10))

DECLARE @SQL VARCHAR(1000)

SET @SQL='ALTER TABLE tb ADD ['+CAST(DAY(GETDATE()) AS VARCHAR)+'_发出] INT DEFAULT 0'
EXEC(@SQL)

INSERT tb(id,data) VALUES(1,'aa')

SELECT * FROM tb

DROP TABLE tb

#3


引用 2 楼 liangCK 的回复:
SQL codeCREATE TABLE tb(ID INT,data varchar(10))

DECLARE @SQL VARCHAR(1000)

SET @SQL='ALTER TABLE tb ADD ['+CAST(DAY(GETDATE()) AS VARCHAR)+'_发出] INT DEFAULT 0'
EXEC(@SQL)

INSERT tb(id,data) VALUES(1,'aa')

SELECT * FROM tb

DROP TABLE tb


貌似你这跟我说的没什么区别呀。
我这样插入列后是要动态更新这列的数据的(从别的表里取值,有好几个表连接的,如果取值为空的话就为0),并不是直接插入值
不知道怎么样设置默认值。。开始我也以为这样设置可以,but in fact ,not..

#4


insert #temp(f1,f2) select isnull(f1,0),isnull(f2,0) from otherTable

#5


引用 3 楼 fwqkey 的回复:
引用 2 楼 liangCK 的回复:
SQL codeCREATE TABLE tb(ID INT,data varchar(10)) 

DECLARE @SQL VARCHAR(1000) 

SET @SQL='ALTER TABLE tb ADD ['+CAST(DAY(GETDATE()) AS VARCHAR)+'_发出] INT DEFAULT 0' 
EXEC(@SQL) 

INSERT tb(id,data) VALUES(1,'aa') 

SELECT * FROM tb 

DROP TABLE tb 
 

貌似你这跟我说的没什么区别呀。 
我这样插入列后是要动态更新这列的数据的(从别的表里取值,有好几个表连接…


这样就是设置是默认值..

而你说到的从另的表里.几个表的连接..如果你得到的是为空(NULL)..
那就说你已经显式的把NULL插入到列当中了..
都已经把值插入到列当中了.还谈什么默认值.

#6


如果就是用ISNULL()去判断是否为NULL,是就取0的话.那把我的话都忽略掉吧.

#7


数据已存在是不能这样用

加上with values就行了
use tempdb
go
create table #Temp(ID int)
insert #Temp select 1
insert #Temp select 2
go
declare @Date datetime,@s nvarchar(1000)
set @Date=getdate()
set @s='ALTER TABLE #Temp Add ['+Cast(Day(@Date) As varchar)+'_发出] int default 0 with values'--加上with values
exec(@s)

select * from #Temp
/*
ID          26_发出
----------- -----------
1           0
2           0

(2 行受影响)


*/


#8


當你再插入數據是就將它設置為0,
但是你查看以前值依舊是null。