從這個激勵了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'。 –