Dinamik index oluşturmada hata alıyorum
Bir tabloda oluşturmak istediğim index adı, tablo adı ve kolun adını tutuyorum.
Bu tablodan alanları okuyarak döngü halinde create index kodunu yazıyorum fakat
"Could not find stored procedure" hatası alıyorum. Yardımcı olabilir misiniz?
Kodum :
DECLARE @count INT = 0;
DECLARE @Index_Name NVARCHAR(50) = '';
DECLARE @Table_Name NVARCHAR(50) = '';
DECLARE @Column_Name NVARCHAR(50) = '';
DECLARE @sql NVARCHAR(MAX) = '';
DECLARE @temptable NVARCHAR(10) = 'tblIndexOl';
IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = ''+@temptable+''))
BEGIN
SET @sql = N'TRUNCATE TABLE '+@temptable+';';
EXEC(@sql);
--PRINT 'TABLO İÇİNDEKİ VERİLER SİLİNDİ';
END;
ELSE
BEGIN
SET @sql = N'CREATE TABLE [dbo].[tblIndexOl](
[id] [int] IDENTITY(1,1) NOT NULL,
[indexName] [nvarchar](150) NOT NULL DEFAULT '''',
[tableName] [nvarchar](150) NOT NULL DEFAULT '''',
[columnName] [nvarchar](150) NOT NULL DEFAULT ''''
);';
EXEC(@sql);
--PRINT 'TABLO OLUŞTU';
END;
SET @sql = N'INSERT INTO [dbo].[tblIndexOl] SELECT a.name AS Index_Name, OBJECT_NAME(a.object_id) AS Table_Name, COL_NAME(b.object_id,b.column_id) AS Column_Name FROM sys.indexes AS a INNER JOIN sys.index_columns AS b ON a.object_id = b.object_id AND a.index_id = b.index_id WHERE name is not null and name like ''IX%'';';
EXEC(@sql);
--INSERT INTO [dbo].[tblIndexOl] VALUES ('', '', '')
SET @count = (SELECT count(*) FROM [dbo].[tblIndexOl]);
WHILE @count > 0
BEGIN
SET @Index_Name = (SELECT [indexName] FROM [kontrol].[dbo].[tblIndexOl] WHERE id = @count);
SET @Table_Name = (SELECT [tableName] FROM [kontrol].[dbo].[tblIndexOl] WHERE id = @count);
SET @Column_Name = (SELECT [columnName] FROM [kontrol].[dbo].[tblIndexOl] WHERE id = @count);
--SET @sql = N'DROP INDEX '+@Index_Name+' ON '+@Table_Name+''; EXEC @sql;
IF EXISTS ((SELECT 1 FROM sys.indexes WHERE Name=''+@Index_Name+''))
BEGIN
PRINT 'Index Mevcut: '+@Index_Name;
END
ELSE
BEGIN
SET @sql = N'CREATE INDEX '+ @Index_Name + ' ON ' + @Table_Name + '('+@Column_Name+');';
EXEC @sql;
--PRINT 'Index Mevcut Değil: '+@Index_Name;
END
SET @count = @count - 1;
END;
Sorumun cevabını buldum sizlere de yardımcı olması açısından ekliyorum.
'sp_executesql' kullanmak çözüm getirdi.