def migrateUpdateForChanges(self, state, target_catalog):
        """
        Create datatype cast expression for target column based on source datatype.
        """
        for targetSchema in target_catalog.schemata:
            for targetTable in targetSchema.tables:
                for target_column in targetTable.columns:
                    # SQL expression to use for converting the column data to the target type
                    # eg.: CAST(? as NVARCHAR(max))
                    type_cast_expression = None
                    source_datatype = None
                    source_column = state.lookupSourceObject(target_column)
                    if source_column:
                        source_datatype = GenericMigration.getColumnDataType(
                            self, source_column)
                    if source_column and source_datatype:
                        if source_datatype == 'XML':
                            type_cast_expression = "CAST(? as NVARCHAR(max))"

                        if type_cast_expression:
                            target_column.owner.customData[
                                "columnTypeCastExpression:%s" % target_column.
                                name] = "%s as ?" % type_cast_expression

        return target_catalog
    def migrateUpdateForChanges(self, state, target_catalog):
        """
        Create datatype cast expression for target column based on source datatype.
        """
        for targetSchema in target_catalog.schemata:
            for targetTable in targetSchema.tables:
                for target_column in targetTable.columns:
                    # SQL expression to use for converting the column data to the target type
                    # eg.: CAST(? as NVARCHAR(max))
                    type_cast_expression = None
                    source_datatype = None
                    source_column = state.lookupSourceObject(target_column)
                    if source_column:
                        source_datatype = GenericMigration.getColumnDataType(
                            self, source_column)
                    if source_column and source_datatype:
                        if source_datatype == 'SYSNAME':
                            type_cast_expression = "CONVERT(VARCHAR(30), ?)"
                        elif source_datatype == 'LONGSYSNAME':
                            type_cast_expression = "CONVERT(VARCHAR(255), ?)"
                        elif source_datatype in ['DECIMAL', 'NUMERIC'
                                                 ] and source_column.identity:
                            if source_column.precision < 5:
                                type_cast_expression = "CONVERT(SMALLINT, ?)"
                            elif source_column.precision < 10:
                                type_cast_expression = "CONVERT(INT, ?)"
                            else:
                                type_cast_expression = "CONVERT(BIGINT, ?)"

                        if type_cast_expression:
                            target_column.owner.customData[
                                "columnTypeCastExpression:%s" % target_column.
                                name] = "%s as ?" % type_cast_expression

        return target_catalog
    def migrateUpdateForChanges(self, state, target_catalog):
        """
        Create datatype cast expression for target column based on source datatype.
        """
        for targetSchema in target_catalog.schemata:
            for targetTable in targetSchema.tables:
                for target_column in targetTable.columns:
                    # SQL expression to use for converting the column data to the target type
                    # eg.: CAST(? as NVARCHAR(max))
                    type_cast_expression = None
                    source_datatype = None
                    source_column = state.lookupSourceObject(target_column)
                    if source_column:
                        source_datatype = GenericMigration.getColumnDataType(self, source_column)
                    if source_column and source_datatype:
                        target_datatype = target_column.simpleType.name.upper()
                        if source_datatype in ['VARCHAR', 'NVARCHAR']:
                            if source_datatype == 'VARCHAR':
                                if target_column.length > 4000 or target_column.length == -1: # NVARCHAR is limited to 4000 - if you need more, you must use MAX insted BUG #18167872
                                    type_cast_expression = "CAST(? as NVARCHAR(MAX))"         # If in source table is VARCHAR(MAX) column lnegth is 0 - so must be casted to NVARCHAR(MAX) BUG #18105486
                                else:
                                    type_cast_expression = "CAST(? as NVARCHAR(%d))" % target_column.length
                        elif source_datatype in ['TEXT', 'NTEXT']:
                            if source_datatype == 'TEXT':
                                type_cast_expression = "CAST(? as NTEXT)"
                        elif source_datatype in ['CHAR', 'NCHAR']:  # MSSQL CHAR's (also VARCHAR's) max length is 8000 non Unicode characters
                            if source_datatype == 'CHAR':
                                type_cast_expression = "CAST(? as NCHAR(%d))" % target_column.length
                        elif source_datatype == 'UNIQUEIDENTIFIER':
                            type_cast_expression = "CAST(? as VARCHAR(64))"
                        elif source_datatype == 'SYSNAME':  # the relevant info is in http://msdn.microsoft.com/en-us/library/ms191240(v=sql.105).aspx
                            type_cast_expression = "CAST(? as VARCHAR(128))"
                        # floating point datatypes:
                        elif source_datatype in ['DECIMAL', 'NUMERIC']:
                            if source_column.scale == 0:
                                type_cast_expression = "CAST(? as %s)" % ('INT' if target_datatype == 'MEDIUMINT' else target_datatype)
                        elif source_datatype == 'XML':
                            type_cast_expression = "CAST(? as NVARCHAR(max))"
                        elif source_datatype in ['GEOMETRY', 'GEOGRAPHY']:
                            type_cast_expression = '?.STAsText()'
                        elif source_datatype == 'HIERARCHYID':
                            type_cast_expression = "CAST(? as VARCHAR(max))"
                        elif source_datatype == 'SQL_VARIANT':
                            type_cast_expression = "CAST(? as NVARCHAR(max))"
                        elif source_datatype in ['BINARY', 'VARBINARY', 'TIMESTAMP', 'ROWVERSION']:
                            type_cast_expression = 'CONVERT(VARBINARY(MAX), ?, 0)'

                        if type_cast_expression:
                            target_column.owner.customData["columnTypeCastExpression:%s" % target_column.name] = "%s as ?" % type_cast_expression

        return target_catalog
    def migrateUpdateForChanges(self, state, target_catalog):
        """
        Create datatype cast expression for target column based on source datatype.
        """   
        for targetSchema in target_catalog.schemata:
            for targetTable in targetSchema.tables:
                for target_column in targetTable.columns:                    
                    # SQL expression to use for converting the column data to the target type
                    # eg.: CAST(? as NVARCHAR(max))
                    type_cast_expression = None
                    source_datatype = None
                    source_column = state.lookupSourceObject(target_column)
                    if source_column:
                        source_datatype = GenericMigration.getColumnDataType(self, source_column)
                    if source_column and source_datatype:
                        if source_datatype == 'XML':
                            type_cast_expression = "CAST(? as NVARCHAR(max))"

                        if type_cast_expression:
                            target_column.owner.customData["columnTypeCastExpression:%s" % target_column.name] = "%s as ?" % type_cast_expression

        return target_catalog
    def migrateUpdateForChanges(self, state, target_catalog):
        """
        Create datatype cast expression for target column based on source datatype.
        """
        for targetSchema in target_catalog.schemata:
            for targetTable in targetSchema.tables:
                for target_column in targetTable.columns:
                    # SQL expression to use for converting the column data to the target type
                    # eg.: CAST(? as NVARCHAR(max))
                    type_cast_expression = None
                    source_datatype = None
                    source_column = state.lookupSourceObject(target_column)
                    if source_column:
                        source_datatype = GenericMigration.getColumnDataType(
                            self, source_column)
                    if source_column and source_datatype:
                        target_datatype = target_column.simpleType.name.upper()
                        if source_datatype in ['VARCHAR', 'NVARCHAR']:
                            if source_datatype == 'VARCHAR':
                                if target_column.length > 4000 or target_column.length == -1:  # NVARCHAR is limited to 4000 - if you need more, you must use MAX insted BUG #18167872
                                    type_cast_expression = "CAST(? as NVARCHAR(MAX))"  # If in source table is VARCHAR(MAX) column lnegth is 0 - so must be casted to NVARCHAR(MAX) BUG #18105486
                                else:
                                    type_cast_expression = "CAST(? as NVARCHAR(%d))" % target_column.length
                        elif source_datatype in ['TEXT', 'NTEXT']:
                            if source_datatype == 'TEXT':
                                type_cast_expression = "CAST(? as NTEXT)"
                        elif source_datatype in [
                                'CHAR', 'NCHAR'
                        ]:  # MSSQL CHAR's (also VARCHAR's) max length is 8000 non Unicode characters
                            if source_datatype == 'CHAR':
                                type_cast_expression = "CAST(? as NCHAR(%d))" % target_column.length
                        elif source_datatype == 'UNIQUEIDENTIFIER':
                            type_cast_expression = "CAST(? as VARCHAR(64))"
                        elif source_datatype == 'SYSNAME':  # the relevant info is in http://msdn.microsoft.com/en-us/library/ms191240(v=sql.105).aspx
                            type_cast_expression = "CAST(? as VARCHAR(128))"
                        # floating point datatypes:
                        elif source_datatype in ['DECIMAL', 'NUMERIC']:
                            if source_column.scale == 0:
                                type_cast_expression = "CAST(? as %s)" % (
                                    'INT' if target_datatype == 'MEDIUMINT'
                                    else target_datatype)
                        elif source_datatype == 'XML':
                            type_cast_expression = "CAST(? as NVARCHAR(max))"
                        elif source_datatype in ['GEOMETRY', 'GEOGRAPHY']:
                            type_cast_expression = '?.STAsText()'
                        elif source_datatype == 'HIERARCHYID':
                            type_cast_expression = "CAST(? as VARCHAR(max))"
                        elif source_datatype == 'SQL_VARIANT':
                            type_cast_expression = "CAST(? as NVARCHAR(max))"
                        elif source_datatype in [
                                'BINARY', 'VARBINARY', 'TIMESTAMP',
                                'ROWVERSION'
                        ]:
                            type_cast_expression = 'CONVERT(VARBINARY(MAX), ?, 0)'

                        if type_cast_expression:
                            target_column.owner.customData[
                                "columnTypeCastExpression:%s" % target_column.
                                name] = "%s as ?" % type_cast_expression

        return target_catalog