所以我有这个脚本应该添加列,从其他列的值更新它,删除其他列,然后重命名新列。
这就是我所拥有的:
ALTER TABLE Certification.ProductEducationCreditTypeTemp ADD NumberOfCredit decimal(18,4) DEFAULT(0) NOT NULL
UPDATE Certification.ProductEducationCreditTypeTemp
SET NumberOfCredit = convert(decimal(18,4), NumberOfCredits)
ALTER TABLE Certification.ProductEducationCreditTypeTemp DROP COLUMN NumberOfCredits
EXEC sp_RENAME 'Certification.ProductEducationCreditTypeTemp.NumberOfCredit', 'NumberOfCredits', 'Column'
问题是,当我尝试运行它时,我得到以下内容,我猜是因为从技术上讲,该列实际上并不存在。是的,我已经尝试过跑了,它根本就不会跑,所以这不是我的智能感知。
Msg 207, Level 16, State 1, Line 3
Invalid column name 'NumberOfCredit'.
答案 0 :(得分:1)
在第一个ALTER之后,只需在GO上放置一个GO:
ALTER TABLE Certification.ProductEducationCreditTypeTemp ADD NumberOfCredit decimal(18,4)
GO
UPDATE Certification.ProductEducationCreditTypeTemp
SET NumberOfCredit = convert(decimal(18,4), NumberOfCredits)
ALTER TABLE Certification.ProductEducationCreditTypeTemp DROP COLUMN NumberOfCredits
EXEC sp_RENAME 'Certification.ProductEducationCreditTypeTemp.NumberOfCredit', 'NumberOfCredits', 'Column'
答案 1 :(得分:1)
只需放一个" Go"在更新之前。它会起作用,因为DDL语句尚未提交。
ALTER TABLE Certification.ProductEducationCreditTypeTemp ADD NumberOfCredit decimal(18,4)
go
UPDATE Certification.ProductEducationCreditTypeTemp
SET NumberOfCredit = convert(decimal(18,4), NumberOfCredits)
ALTER TABLE Certification.ProductEducationCreditTypeTemp DROP COLUMN NumberOfCredits
EXEC sp_RENAME 'Certification.ProductEducationCreditTypeTemp.NumberOfCredit', 'NumberOfCredits', 'Column'

由于
答案 2 :(得分:0)
您有什么理由不能改变列吗?我可以理解使用迁移脚本,如果您需要批量处理以控制日志增长等,但您似乎并没有这样做。
ALTER TABLE ALTER COLUMN工作正常。
这是一个显示它的小提琴:http://sqlfiddle.com/#!6/442f6/12/0
如上所述,请注意数据大小和日志扩展。