У меня есть следующий сценарий для восстановления индексов:Не удается перестроить индексы с помощью EF ExecuteSqlCommand
DECLARE @TableName VARCHAR(255)
DECLARE @sql NVARCHAR(500)
DECLARE @fillfactor INT
SET @fillfactor = 80
DECLARE TableCursor CURSOR FOR
SELECT OBJECT_SCHEMA_NAME([object_id])+'.['+name +']' AS TableName
FROM sys.tables
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
EXEC (@sql)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
У меня есть другие сценарии, которые работают таким же образом, как эта.
Когда я выполнить это следующим образом:
var sql = ResourceUtilities.ReadResourceContent("rebuild_indexes.sql");
db.Database.ExecuteSqlCommand(sql);
я получаю следующее сообщение об ошибке:
Incorrect syntax near 'TableCursor'.
Детали реализации ReadResourceContent
не имеют значения - я бегу другой произвольный SQL с этим и он отлично работает.
Почему это происходит и что нужно изменить?
Что SQL Server версии вы выполнить это на? – ErikEJ
a сторону: Хорошая практика - рассмотреть фрагментацию acutal перед вызовом перестройки – ErikEJ
@ErikEJ - Azure SQL - и абсолютно. Это V1, где мы работаем каждые две недели, так как это приближается к частоте, на которой дефрагментация достигает уровней, требующих внимания. – SB2055