更新了最近添加的脚本

时间:2015-06-16 17:57:31

标签: sql tsql

所以我有这个脚本应该添加列,从其他列的值更新它,删除其他列,然后重命名新列。

这就是我所拥有的:

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'.

3 个答案:

答案 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

如上所述,请注意数据大小和日志扩展。