REBUILD_INDEX SP 中 'Activity' 附近的语法不正确
Incorrect syntax near 'Activity' in REBUILD_INDEX SP
下面是用于 REBUILD_INDEX 数据库表的存储过程,它之前执行得很好,但是当我现在检查时它显示以下错误,
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'Activity'.
Msg 319, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon
但是存储过程中没有文本'Activity',也没有使用CTE。无法猜测这个突然问题的原因。谁能给我一些线索?
USE [DBName]
GO
/****** Object: StoredProcedure [dbo].[REBUILD_INDEX]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[REBUILD_INDEX]
AS
BEGIN
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
END
您应该添加分号并使用 QUOTENAME
:
ALTER PROCEDURE [dbo].[REBUILD_INDEX]
AS
BEGIN
DECLARE @TableName VARCHAR(255);
DECLARE @sql NVARCHAR(500);
DECLARE @fillfactor INT;
SET @fillfactor = 80;
DECLARE TableCursor CURSOR FOR
SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+QUOTENAME(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) + ');';
PRINT @sql; -- debug only
EXEC (@sql);
FETCH NEXT FROM TableCursor INTO @TableName;
END;
CLOSE TableCursor;
DEALLOCATE TableCursor;
END;
我打赌解析器错误 WITH
常见 Table 表达式 WITH
来自 ALTER INDEX
.
反正我会用Ola Hallengren's SQL Server Index and Statistics Maintenance Scripts而不是重新发明轮子。
"Activity" 几乎可以肯定是带有 space 的 Table 名称的一部分。在 ALTER INDEX 语句中的 @TableName 周围添加 Quotename(..)。
下面是用于 REBUILD_INDEX 数据库表的存储过程,它之前执行得很好,但是当我现在检查时它显示以下错误,
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'Activity'.Msg 319, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon
但是存储过程中没有文本'Activity',也没有使用CTE。无法猜测这个突然问题的原因。谁能给我一些线索?
USE [DBName]
GO
/****** Object: StoredProcedure [dbo].[REBUILD_INDEX]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[REBUILD_INDEX]
AS
BEGIN
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
END
您应该添加分号并使用 QUOTENAME
:
ALTER PROCEDURE [dbo].[REBUILD_INDEX]
AS
BEGIN
DECLARE @TableName VARCHAR(255);
DECLARE @sql NVARCHAR(500);
DECLARE @fillfactor INT;
SET @fillfactor = 80;
DECLARE TableCursor CURSOR FOR
SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+QUOTENAME(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) + ');';
PRINT @sql; -- debug only
EXEC (@sql);
FETCH NEXT FROM TableCursor INTO @TableName;
END;
CLOSE TableCursor;
DEALLOCATE TableCursor;
END;
我打赌解析器错误 WITH
常见 Table 表达式 WITH
来自 ALTER INDEX
.
反正我会用Ola Hallengren's SQL Server Index and Statistics Maintenance Scripts而不是重新发明轮子。
"Activity" 几乎可以肯定是带有 space 的 Table 名称的一部分。在 ALTER INDEX 语句中的 @TableName 周围添加 Quotename(..)。