标题:一个关于SQLserver临时表的问题
取消只看楼主
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
结帖率:100%
已结贴  问题点数:20 回复次数:3 
一个关于SQLserver临时表的问题
数据都在远程服务器上,使用SQLserver数据库
数据库中的表的每个字段都有设定default和not null,如:alter table TableName add 字段名 varchar(20) default '' not null
向正式表中插入记录时,未涉及的字段都会按照default的定义赋值

操作
-- 先生成一个空的临时表
select * INTO #临时表名 from TableName where 1=2
向这个临时表中插入记录
问题来了,如果insert 命令只涉及了其中部分字段,则会报错:字段名X 不允许为空
从报错内容来看,临时表是继承了正式表的not null设定,但好像没继承default定义

问:生成临时表时应该怎么写才能完整继承正式表的相关设定
或者:完全不继承正式表的设定也可以(字段都允许空)


[此贴子已经被作者于2023-5-12 10:05编辑过]

搜索更多相关主题的帖子: 设定 临时表 继承 SQLserver 字段 
2023-05-11 15:24
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
感谢以上回复
确实是想偷懒,如果只能使用正式表的创建语句来生成临时表的话,那还是插入时把每个字段都给值来的简单
另外,就算是能反查,也没法使用SQLserver菜单方式,还是要在程序里实现

2023-05-11 20:49
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 6楼 csyx
感谢提供的方法,这样就会确保没问题了

我只是对临时表字段设定的继承有疑问,为什么只继承了一部分,我怕是我的方法有问题
2023-05-12 08:01
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
SELECT id,shopcode,ordercode,denpyouno,quantity INTO #_6M50KVJ3J FROM 正式表名 WHERE 1=2
ALTER TABLE #_6M50KVJ3J add DEFAULT '' for [id]
ALTER TABLE #_6M50KVJ3J add DEFAULT '' for [shopcode]
ALTER TABLE #_6M50KVJ3J add DEFAULT '' for [ordercode]
ALTER TABLE #_6M50KVJ3J add DEFAULT '' for [denpyouno]
ALTER TABLE #_6M50KVJ3J add DEFAULT '' for [quantity]

insert into #_6M50KVJ3J (shopcode) values ('asd')
insert into #_6M50KVJ3J (ordercode) values ('111')
select * from #_6M50KVJ3J

drop table #_6M50KVJ3J

以上方法测试可行

二楼csyx版主说的正确

发现一个奇怪的现象:
对数值型字段,default ''居然能行,而且默认值还是数值

[此贴子已经被作者于2023-5-12 10:08编辑过]

2023-05-12 10:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-512170-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.067661 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved