我们有一个必须允许多次重新运行的脚本。
我们有一个MS-SQL脚本,如果存在(现在已过时)列,则更新表,然后删除该列。为确保脚本可以多次运行,它首先会在执行更新之前检查是否存在列。
脚本在我们的开发数据库上按预期工作,在第一次运行时更新数据,然后在后续运行中显示消息“Not updating”。
在我们的测试数据库中,脚本在第一次运行时运行正常,但在后续运行中出现“无效列名'OldColumn'”错误;如果我注释掉UPDATE和ALTER语句,它会按预期运行。
有没有办法强制脚本运行,即使存在潜在错误,还是与数据库的设置方式有关? (手指交叉,我看起来不像一个完整的菜鸟!)
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyTable' AND COLUMN_NAME = 'OldColumn')
BEGIN
PRINT 'Updating and removing old column...'
UPDATE MyTable SET NewColumn='X' WHERE OldColumn=1;
ALTER TABLE MyTable DROP COLUMN OldColumn;
END
ELSE
PRINT 'Not updating'
GO
答案 0 :(得分:1)
作为你可以做的工作
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyTable' AND COLUMN_NAME = 'OldColumn')
BEGIN
PRINT 'Updating and removing old column...'
EXEC ('UPDATE MyTable SET NewColumn=''X'' WHERE OldColumn=1;');
ALTER TABLE MyTable DROP COLUMN OldColumn;
END
ELSE
PRINT 'Not updating'