Sql 存储过程无法找到对象。。。SSIS中出错,但在SSMS中工作正常

Sql 存储过程无法找到对象。。。SSIS中出错,但在SSMS中工作正常,sql,sql-server,stored-procedures,ssis,Sql,Sql Server,Stored Procedures,Ssis,我正在尝试构建一个SSIS包,该包动态地重新构建数据库中所有表的索引。一般的想法是,包将确保表没有被更新,然后执行一个存储过程,删除旧索引(如果存在),然后重新创建它。该方案背后的逻辑似乎是合理的。我遇到的问题是,当我执行包时,我不断得到错误: 找不到对象…因为它不存在或您没有权限 由于存在IF EXISTS部分,现有索引应不相关 程序如下所示: REFERENCE_NAME AS VARCHAR(50), COLUMN_NAME AS VARCHAR(50), INDEX_NAME AS V

我正在尝试构建一个SSIS包,该包动态地重新构建数据库中所有表的索引。一般的想法是,包将确保表没有被更新,然后执行一个存储过程,删除旧索引(如果存在),然后重新创建它。该方案背后的逻辑似乎是合理的。我遇到的问题是,当我执行包时,我不断得到错误:

找不到对象…因为它不存在或您没有权限

由于存在
IF EXISTS
部分,现有索引应不相关

程序如下所示:

REFERENCE_NAME AS VARCHAR(50), 
COLUMN_NAME AS VARCHAR(50),
INDEX_NAME AS VARCHAR(50)
AS
BEGIN
    SET NOCOUNT ON;

DECLARE @sql NVARCHAR(MAX)
SET @sql = 'IF EXISTS (SELECT name FROM sysindexes WHERE name = '+CHAR(39)+@INDEX_NAME+CHAR(39)+') '+
           'DROP INDEX '+@INDEX_NAME+' ON '+@REFERENCE_NAME+' '+

           'CREATE INDEX '+@INDEX_NAME+' ON '+@REFERENCE_NAME+'('+@COLUMN_NAME+') ON [INDEX]'

EXEC sp_executesql @sql

END

GO
我能够通过SSMS很好地执行该过程,没有错误,并且它构建了索引。当我在SSIS中执行包时,它会在到达执行存储过程的任务时出错。我已确保SSIS正在将变量传递给执行SQL任务,并已验证我是否具有db_ddladmin权限。除此之外,我不知所措,为此我已经用头撞墙一天半了

我是否缺少一些东西,需要请求一些权限,或者需要解决一些问题

如有任何信息,将不胜感激



巴托弗,这绝对不是在看错误的数据库。我已经检查了proc是否存在,包上的唯一连接是到特定数据库。是的,我正在使用Visual Studio 2010 Shell数据工具手动执行包。 Sorrel,我试过你的想法,在删除的@sql语句上,在删除和创建的@sql语句上,以及在整个@sql语句上,进行一次理智检查,没有乐趣。
Gnackenson,我也有同样的想法,但是连接身份验证方法设置为Windows身份验证,与ssms相同。您知道为什么它可能使用不同的权限吗?

SSIS SQL任务似乎忽略了
如果存在的话。为了解决我的问题,我将我的SQL任务从
DROP-CREATE
更改为
DISABLE-ENABLE

您能否确定这实际上是过程中的错误还是SSIS错误,表明它没有看到过程(可能是错误的数据库)?你是如何执行这个包的?通过数据工具手动执行?您是否尝试过在@sql语句中添加BEGIN/END的合理性检查
'BEGIN DROP INDEX'+@INDEX_NAME+'END'+..
在运行SSIS包时,是否确定它在与ssmsBartover相同的权限下运行,它肯定没有查看错误的数据库。我已经检查并再次检查了proc是否确实存在,并且SSIS包上的唯一连接是到该特定数据库。是的,我正在使用Visual Studio 2010 Shell数据工具手动执行SSIS包。