Jim*_*Jim 4 sql sql-server indexing sql-server-2005
在尝试优化SQL脚本时,我建议添加索引.
指定索引应该包含哪些数据库的最简单方法是什么?
IF EXISTS (SELECT * FROM sysindexes WHERE NAME = 'idx_TableA')
DROP INDEX TableA.idx_TableA
IF EXISTS (SELECT * FROM sysindexes WHERE NAME = 'idx_TableB')
DROP INDEX TableB.idx_TableB
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,TableA在DB-A中,而TableB在DB-B中.
我收到以下错误,当我改变DROP INDEX TableA.idx_TableA 到DROP INDEX DB-A.dbo.TableA.idx_TableA
Msg 166, Level 15, State 1, Line 2
'DROP INDEX' does not allow specifying the database name as a prefix to the object name.
Run Code Online (Sandbox Code Playgroud)
任何想法都表示赞赏.
如果要删除不同数据库上的索引,则删除命令必须使用USE语句.
USE [DatabaseName]
Drop Index [IndexName]
Run Code Online (Sandbox Code Playgroud)
如果你有权限,另一种方法是使用EXEC('sql').另请注意,在查询sys.indexes时,需要使用数据库名称作为前缀:
IF EXISTS (SELECT * FROM [DB-A].sys.indexes WHERE name = 'idx_TableA')
EXEC('USE [DB-A]; DROP INDEX TableA.idx_TableA')
IF EXISTS (SELECT * FROM [DB-B].sys.indexes WHERE name = 'idx_TableB')
EXEC('USE [DB-B]; DROP INDEX TableB.idx_TableB')
Run Code Online (Sandbox Code Playgroud)
如果您不能发出 USE:
EXEC [DB-A].dbo.sp_executesql N'DROP INDEX TableA.idx_TableA'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5421 次 |
| 最近记录: |