Sql server SQL Server存储过程在从其他服务器/框架调用时不执行命令,而是在本地工作

Sql server SQL Server存储过程在从其他服务器/框架调用时不执行命令,而是在本地工作,sql-server,stored-procedures,rollback,sql-execution-plan,Sql Server,Stored Procedures,Rollback,Sql Execution Plan,我创建了一个SQL Server存储过程,其中包含insert和update语句以及日志表。当我使用 EXEC stored_procedure_name param1 它工作得非常好,日志条目被插入到日志表中;但是,当使用同一SQL server用户从另一台服务器调用同一存储过程时,将调用该存储过程,并且正确的输出/响应将发送到调用服务器,但不会执行insert和update语句,也不会插入日志 同样,当我在本地调用存储过程时,一切都正常。当我检查日志表中的条目(Id为Id列为identit

我创建了一个SQL Server存储过程,其中包含insert和update语句以及日志表。当我使用

EXEC stored_procedure_name param1
它工作得非常好,日志条目被插入到日志表中;但是,当使用同一SQL server用户从另一台服务器调用同一存储过程时,将调用该存储过程,并且正确的输出/响应将发送到调用服务器,但不会执行insert和update语句,也不会插入日志

同样,当我在本地调用存储过程时,一切都正常。当我检查日志表中的条目(Id为
Id
列为
identity(1,1)
)时,有两个条目Id为1和3

我认为Id=2的条目被插入,然后在从另一台服务器调用时回滚

我不理解这种不同的行为。请帮忙

提前谢谢

ALTER PROCEDURE [dbo].[temp_procedure] 
    (@aid VARCHAR(MAX))
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @RETURN_CODE INT = -2;
    DECLARE @RETURN_MESSAGE VARCHAR(MAX) = 'ENTITY NOT FOUND';

    -- Check IF exist and  Update
    IF EXISTS (SELECT 1 FROM temp WHERE c = @aid)
    BEGIN
        UPDATE temp
        SET a = 0, b = 0,               
        WHERE c = @aid;

        SET @RETURN_CODE = 0;
        SET @RETURN_MESSAGE = 'SUCCESS';
    END

    -- Log action and result in logging table for particular a_id
    -- also has id column as identity
    INSERT INTO [dbo].[Logs] ([A_Id], [Created_Date], [Return_Code], [Return_Message])
    VALUES (@aid, GETDATE(), @RETURN_CODE, @RETURN_MESSAGE)

    SELECT @RETURN_CODE AS 'RETURN_CODE', @RETURN_MESSAGE AS 'RETURN_MESSAGE';
END

我猜您已经混淆了代码和逻辑,并且在这样做的过程中删除了所有含义。我们所能做的就是猜测。您的代码根本不处理错误*,它通过使用resultset替换真实的数据库错误来消除这些错误。所以重新开始。当一个错误发生时,你抛出它;您不会返回以“error”作为消息的结果集。停止将所有内容定义为varchar(max)。最后,您的代码总是记录日志,但并不总是更新。这似乎很奇怪。您需要调试您的过程,以及如何更彻底地使用它。您好,谢谢您的建议。实际上,真正的过程有try..catch,而且要求我总是必须记录“ID”被传递给过程,并且它在系统中是否可用这就是为什么我总是记录记录,但只有在表中有t时才更新。