SQL脚本在一个数据库上运行正常,另一个数据库运行错

时间:2011-03-31 00:06:32

标签: sql-server

我们有一个必须允许多次重新运行的脚本。

我们有一个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

1 个答案:

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