各位大神,各位高手!本人在此求助一个问题。
数据库中每一个表格莫名其妙多了一列:_mask_from_v2
由于多了这么个东西,我在用自己的应用软件导出XML格式时,显示多了一行, <xs:element name="_MASK_TO_V2" type="xs:base64Binary" minOccurs="0" />由于这个原因,无法进行数据的正常导入。哪位大神知道有什么方法可以解决吗?能够批量删除的方法?删除之后会不会对数据库有什么影响?
数据库中每一个表格莫名其妙多了一列:_mask_from_v2
由于多了这么个东西,我在用自己的应用软件导出XML格式时,显示多了一行, <xs:element name="_MASK_TO_V2" type="xs:base64Binary" minOccurs="0" />由于这个原因,无法进行数据的正常导入。哪位大神知道有什么方法可以解决吗?能够批量删除的方法?删除之后会不会对数据库有什么影响?
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的?
我参照您的脚本语句进行了测试,没有删掉。表里边还是有_mask_from_v2
能否帮检查一下? 谢谢
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)你先想好了,万一反悔,这步的逆操作就只有还原数据库最方便了
USE 数据库名
GO
我刚才试过了,确实是因为有索引才导致不成功,我尝试手动删除一个索引之后,就可以了。
但问题是有100多个表格,手动太麻烦。
有没方法用脚本批量删除索引呢?
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,并加个索引试下