Sql server SQL Server存储过程在从其他服务器/框架调用时不执行命令,而是在本地工作
我创建了一个SQL Server存储过程,其中包含insert和update语句以及日志表。当我使用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
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时才更新。