向SQL Server现有表插入数据遇问题,附相关SQL代码求助
解决SQL Server向现有表插入数据的问题
先帮你梳理下当前代码里的核心问题,再给出对应的解决方案:
- 你的代码开头用了
DROP TABLE语句,这会直接删除目标表tbl_ATR,但你的需求是向现有表插入数据,这完全违背了你的初始目标; ATR1的计算逻辑不完整,iif(yest_close = 0 , 1 , ...没有闭合,会直接触发语法报错;- 你没有使用
INSERT INTO语句来将查询结果写入现有表,单纯的SELECT只会返回结果集,不会完成插入操作。
正确的插入写法(针对现有表)
假设你的Coinmarketcap.dbo.tbl_ATR表已经存在,且字段结构和你要插入的查询结果匹配,分两种场景处理:
场景1:清空现有表后插入新数据
(注意:TRUNCATE会彻底删除表中所有数据,且不可恢复,确认需求后再执行)
-- 可选:清空现有表数据 TRUNCATE TABLE Coinmarketcap.dbo.tbl_ATR; -- 插入查询结果到现有表 INSERT INTO Coinmarketcap.dbo.tbl_ATR ( Ticker, Date, px_high, px_low, px_close, yest_close, ATR_spd, ATR1 ) SELECT [Ticker], [Date], [px_high], [px_low], [px_close], [yest_close], ATR_spd = IIF([px_high] > yest_close, [px_high], yest_close) - IIF([px_low] > yest_close, yest_close, [px_low]), -- 补全ATR1的计算逻辑,这里假设你要除以yest_close(避免除0做了处理) ATR1 = (IIF([px_high] > yest_close, [px_high], yest_close) - IIF([px_low] > yest_close, yest_close, [px_low])) / IIF(yest_close = 0, 1, yest_close) -- 替换成你实际的数据源表 FROM Your_Source_Data_Table;
场景2:直接向现有表追加数据
如果不需要清空原有数据,直接去掉TRUNCATE TABLE语句,执行上面的INSERT INTO...SELECT部分即可。
关键注意事项
- 确保
INSERT INTO后的字段列表和SELECT返回的字段数量、数据类型、顺序完全匹配,否则会触发插入失败; - 如果你原本的
ATR1计算逻辑不是除以yest_close,请根据实际需求修改IIF(yest_close = 0, 1, yest_close)后的部分; - 如果目标表有主键、唯一约束等,要保证插入的数据不会违反这些规则,否则会报错。
内容的提问来源于stack exchange,提问作者Coding_Newbie
相关产品推荐
相关产品推荐

