从这个激励了Question如何检查某个索引是否存在于另一个模式中的表中?
我创造了这个过程:
CREATE PROCEDURE [dbo].[dropIndexWithSchema](@schemaName VARCHAR(200), @tableName VARCHAR(200), @indexName VARCHAR(200))
AS
BEGIN
DECLARE @sql nvarchar(512)
IF EXISTS (SELECT i.* FROM @schemaName.sys.indexes i WHERE i.name = @indexName AND i.object_id = OBJECT_ID(@schemaName + '.dbo.' + @tableName))
BEGIN
SELECT @sql = 'DROP INDEX ' + @indexName + ' ON ' + @schemaName + '.dbo.' + @tableName;
EXEC sp_executesql @sql
END
END
GO
当然,这并不如@schemaName
在工作FROM子句是不能够被parametrised。还有构建OBJECT_ID
函数的对象名称的问题。
我想编写一个过程,从模式A,将能够删除模式B中的表上的索引,如果它存在。
有作为' .sys.indexes'没有这样的事情。它是' .sys.indexes' –
感谢您的反馈。我会注意到它的未来。在讨论各种数据库产品中的类似概念时,我感到困惑。 –
模式是查询的'dbo'部分。您可能在同一数据库的不同模式下的'dbo.instruments'和'dbo2.instruments'上有多个'IX_Test'。 –