各位大神,各位高手!本人在此求助一个问题。             
数据库中每一个表格莫名其妙多了一列:_mask_from_v2
由于多了这么个东西,我在用自己的应用软件导出XML格式时,显示多了一行,                <xs:element name="_MASK_TO_V2" type="xs:base64Binary" minOccurs="0" />由于这个原因,无法进行数据的正常导入。哪位大神知道有什么方法可以解决吗?能够批量删除的方法?删除之后会不会对数据库有什么影响?

解决方案 »

  1.   

    SQL server 2008
      

  2.   

    这里是 mysql
      

  3.   

    如果对你来说确实没用,就删掉呗
    DECLARE @SQL VARCHAR(MAX)
    SET @SQL=''
    SELECT @SQL=@SQL+'ALTER TABLE ['+T1.name+'] DROP COLUMN ['+T2.name+'] '
    FROM SYS.SYSOBJECTS T1 JOIN SYS.SYSCOLUMNS T2 ON T1.id=T2.id AND T2.name='_MASK_TO_V2'
    EXEC(@SQL)
    你得想好了才能执行上面的语句另外,有没有问下客户,为啥会有呢?是客户加的吗?还有,你们程序是怎么处理XML的,多了一列就不行了?难不成按数字索引读取XML的?
      

  4.   

    这位大哥,您好!
    我参照您的脚本语句进行了测试,没有删掉。表里边还是有_mask_from_v2
    能否帮检查一下? 谢谢
      

  5.   

    那就DECLARE @SQL VARCHAR(MAX)
    SET @SQL=''
    SELECT @SQL=@SQL+'ALTER TABLE ['+T1.name+'] DROP COLUMN ['+T2.name+'] '
    FROM SYS.SYSOBJECTS T1 JOIN SYS.SYSCOLUMNS T2 ON T1.id=T2.id AND T2.name='_mask_from_v2'
    EXEC(@SQL)你先想好了,万一反悔,这步的逆操作就只有还原数据库最方便了
      

  6.   

    _mask_from_v2 后面这个不一样的,不需要改什么东西然后,前面可以加上
    USE 数据库名 
    GO
      

  7.   

    Ky_min 大神您好! 非常感谢您的回复
    我刚才试过了,确实是因为有索引才导致不成功,我尝试手动删除一个索引之后,就可以了。
    但问题是有100多个表格,手动太麻烦。
    有没方法用脚本批量删除索引呢?
      

  8.   

    DECLARE @SQL VARCHAR(MAX)
    SET @SQL=''
    SELECT @SQL=@SQL+'ALTER TABLE ['+T4.name+'] DROP CONSTRAINT ['+T1.name+'] '
    FROM
    SYS.SYSINDEXES T1 JOIN SYS.SYSINDEXKEYS T2 ON T1.id=T2.id AND  T1.indid=T2.indid
    JOIN SYS.SYSCOLUMNS T3 ON T1.id=T3.id AND T2.colid=T3.colid
    JOIN SYS.SYSOBJECTS T4 ON T1.id=T4.id
    WHERE T3.name='_mask_from_v2'
    EXEC(@SQL)
    SET @SQL=''
    SELECT @SQL=@SQL+'ALTER TABLE ['+T1.name+'] DROP COLUMN ['+T2.name+'] '
    FROM SYS.SYSOBJECTS T1 JOIN SYS.SYSCOLUMNS T2 ON T1.id=T2.id AND T2.name='_mask_from_v2'
    EXEC(@SQL)试下,应该可以,先在测试数据库,建个测试表,取个列名_mask_from_v2,并加个索引试下