SQL错误 - 无效的对象名称存储过程

时间:2011-08-08 20:19:36

标签: sql sql-server

我实现并支持允许我在应用程序中创建宏的软件应用程序。其中一个宏步骤是执行SQL过程。当我尝试运行正在执行存储过程的宏(_ TSi _CustomerAccountCorrection)时,我看到了这个错误:

Error 0 executing [__TSi__CustomerAccountCorrection].
Invalid object name 'TSI_ProService.dbo.Customer'.

如果我在SQL查询分析器(使用集成安全性的SQL 2000)中运行此存储过程,则proc运行正常。我正在运行它的应用程序使用一个SQL连接字符串,该字符串设置为使用集成安全性,我也以相同的用户身份登录。

不幸的是,我没有该应用程序的源代码。我希望有人可能会认识到这里发生了什么,或者至少给我一个关于问题可能是什么的建议。

据我所知,当通过应用程序运行存储过程并通过查询分析器完全相同时。

这是存储过程:

CREATE  PROCEDURE [dbo].[__TSi__CustomerAccountCorrection] AS
set xact_abort on
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ 
BEGIN TRANSACTION trans1
DECLARE cur_cust CURSOR FOR
 SELECT [AccountNumber] FROM DBSTR1.HQ.dbo.PSD_CustomerExport
DECLARE @accountNumber varchar(50);
DECLARE @custAccountNumber varchar(50);
DECLARE @query varchar(500);
OPEN cur_cust;

FETCH NEXT FROM cur_cust INTO @accountNumber;

WHILE @@FETCH_STATUS = 0 BEGIN
 set @custAccountNumber = (SELECT TOP 1 [Account] FROM [Customer] WHERE [UserData2] = @accountNumber)

 if @custAccountNumber is null
 begin
  SET @custAccountNumber = @accountNumber
 end

 --UPDATE DBSTR1.HQ.dbo.PSD_CustomerExport SET [VcrAccountNumber] = @custAccountNumber WHERE [AccountNumber] = @accountNumber
 UPDATE DBSTR1.HQ.dbo.PSD_CustomerExport SET [VcrAccountNumber] = @custAccountNumber WHERE CURRENT OF cur_cust

 FETCH NEXT FROM cur_cust INTO @accountNumber;
END
CLOSE cur_cust;
DEALLOCATE cur_cust;
COMMIT TRANSACTION trans1
GO

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

远程运行时,与在SSMS中运行它时,它不会在相同的DB上下文中执行。

请注意,customer表未使用三部分名称。 SQL Server正在假设customer表所在的数据库和模式,并且猜测是错误的。

它正在使用默认上下文用于连接的任何内容,您的错误代码可能是数据库TSI_ProService,架构默认为dbo。其中一个或两个都不正确。

该表中包含哪些数据库和模式?在proc中的调用中使用3PN(Database.schema.object),我认为它可能会正常工作。