找不到存储过程

JP *_*han 1 sql-server-2005

我创建了一个用游标重建索引的过程。我没有正确执行,而是收到一条错误消息:

消息 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)

Aar*_*and 5

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)

将此作为一种习惯可以确保您能够在可能的情况下使用强类型参数。