我有一个数据库升级脚本来删除列上的非null约束。我想进行前提条件检查,并且仅当它为非null时才调用ALTER TABLE

master.xml脚本是一种渐进式脚本,在该脚本中,我不断添加脚本,并且每次都会运行整个脚本。第一次运行我的Alter Table脚本后,我不想再次运行它。

找不到为此的预定义前提条件,也无法编写sqlcheck。

最佳答案

可以使用sqlCheck完成。

mysqlt的


  • <preConditions onFail="MARK_RAN" onError="CONTINUE">
        <sqlCheck expectedResult="NO">
            SELECT is_Nullable
            FROM  INFORMATION_SCHEMA.COLUMNS
            WHERE table_name='<table_name>'
            AND column_name='<column_name>'
        </sqlCheck>
    </preConditions>
    
  • 对于Oracle:
    <preConditions onFail="MARK_RAN" onError="CONTINUE">
        <sqlCheck expectedResult="N">
            SELECT Nullable
            FROM user_tab_columns
            WHERE table_name = '<table_name>'
            AND column_name = '<column_name>'
        </sqlCheck>
    </preConditions>
    
  • 对于SQL Server:
    <preConditions onFail="MARK_RAN" onError="CONTINUE">
        <sqlCheck expectedResult="0">
          SELECT is_nullable
          FROM sys.columns
          WHERE  object_id = OBJECT_ID('<table_name>')
          AND name = '<column_name>'
        </sqlCheck>
    </preConditions>
    
  • 09-29 22:44