use*_*480 12 sql-server constraint scripting alter-table
如何修改带有索引的表的类型?我试图在一个空表上做一个改变列来修改从日期时间到 varchar(15) 的类型,并得到错误说它依赖于列(结果是索引)。
通过右键单击索引并编写 drop 脚本,我能够在本地轻松解决此问题,但是我需要在无法访问索引名称的其他服务器上推出此功能。
有没有办法制作一个可以删除任何索引的脚本,让我在列上更改数据类型然后读取索引?谢谢!
您可以使用 sys.indexes 视图来获取索引。您可以将此表加入 sys.tables、sys.columns 和 sys.index_column 以获取信息以创建动态删除索引。您可以使用这个简单的选择来生成放置索引。您可以使用 where 子句来过滤表和列。如果要更改 Table1.Column1,则必须使用这些名称来过滤选择以获得正确的删除语句
use [testdb]
go
declare @sqlDropIndex NVARCHAR(1000)
select @sqlDropIndex = 'DROP INDEX ' + idx.name + ' ON ' + tbl.name
from sys.indexes idx inner join
sys.tables tbl on idx.object_id = tbl.object_id inner join
sys.index_columns idxCol on idx.index_id = idxCol.index_id inner join
sys.columns col on idxCol.column_id = col.column_id
where idx.type <> 0 and
tbl.name = 'MyTableName' and
col.name = 'MyColumnName'
group by idx.name, tbl.name
order by idx.name desc
print @sqlDropIndex
--exec sp_executeSql @sqlDropIndex
go
Run Code Online (Sandbox Code Playgroud)
希望能帮到你