我创建了一个用游标重建索引的过程。我没有正确执行,而是收到一条错误消息:
消息 2812,级别 16,状态 62
找不到存储过程
该怎么做才能摆脱这种情况呢?
USE [ACT]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[myProcedure]
AS
BEGIN
DECLARE @idx_name VARCHAR(200) -- Index name
DECLARE @tableName VARCHAR(256) -- Table Name
DECLARE @sql varchar(500)
DECLARE Index_Rebuild_Cursor CURSOR FOR
SELECT OBJECT_NAME(ps.OBJECT_ID)tbl_name,b.name idx_name
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS ps
INNER JOIN sys.indexes AS b ON ps.OBJECT_ID = b.OBJECT_ID
AND ps.index_id = b.index_id
WHERE ps.avg_fragmentation_in_percent>80
OPEN Index_Rebuild_Cursor
FETCH NEXT FROM Index_Rebuild_Cursor INTO @tableName,@idx_name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql='ALTER INDEX '+@idx_name+' ON '+@tableName+' REBUILD'
EXEC @sql
FETCH NEXT FROM Index_Rebuild_Cursor INTO @tableName,@idx_name
END
CLOSE Index_Rebuild_Cursor
DEALLOCATE Index_Rebuild_Cursor
END
Run Code Online (Sandbox Code Playgroud)
EXEC @sql
是无效的语法(你需要EXEC(@sql);
- 那些括号很重要)。尽管如此,我还是强烈推荐:
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'ALTER ...';
-----------^ this N is important too
...
EXEC sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)
将此作为一种习惯可以确保您能够在可能的情况下使用强类型参数。
归档时间: |
|
查看次数: |
3873 次 |
最近记录: |