Sql 存储过程仅在从Management studio运行时更新
是的。我有一个很奇怪的问题。我有以下存储过程Sql 存储过程仅在从Management studio运行时更新,sql,sql-server,ssms,Sql,Sql Server,Ssms,是的。我有一个很奇怪的问题。我有以下存储过程 ALTER PROCEDURE [CP24SHOP].[sp_part_set_status_bulk] @user nvarchar(max), @doerTicket VARCHAR ( 200 ) = null, @status int, @items CP24SHOP.udt_parts
ALTER PROCEDURE [CP24SHOP].[sp_part_set_status_bulk]
@user nvarchar(max),
@doerTicket VARCHAR ( 200 ) = null,
@status int,
@items CP24SHOP.udt_parts READONLY
AS
BEGIN
SET NOCOUNT ON;
-- Check security
exec websocket.sp_validate_user
@user,
@doerTicket out
-- foreach row in @items, update the status
MERGE INTO [file].ItemPart WITH ( XLOCK, ROWLOCK ) AS target
USING ( SELECT
item.GID
FROM @items AS item
) AS source
ON ( target.GID = source.GID )
WHEN MATCHED THEN
UPDATE SET
target.[Status] = @status,
target.DateTimeModified = GETDATE();
select 'bob'
RETURN 0
END
当我在ManagementStudio中使用以下代码运行它时
declare @user nvarchar(max) = 'websocket'
DECLARE @list CP24SHOP.udt_parts
INSERT INTO @list
(
GID
)
VALUES
(
-7228376
)
select [Status] from [file].ItemPart
where GID = -7228376
exec CP24SHOP.sp_part_set_status_bulk
@user = @user,
@items = @list,
@status = '155'
select [Status], DateTimeModified from [file].ItemPart
where GID = -7228376
它会毫无问题地更新状态
但是当通过websocket调用它时,它运行代码并返回“bob”,但当我检查数据库时,该项的状态没有更新。我不知道可能出了什么问题呃-我想你错过了一个承诺。
在我看来,你正在更新&然后又在回滚 在我的测试中是的,但不是来自我们的websocket;-)我已经删除了回滚,因为它似乎会造成更多的混乱。当代码如上图所示运行时,会出现与以前相同的问题hmm-websocket.sp_validate_用户是否会默默失败?有时我看到某些Web框架(如NHibernate)有自己的包装器事务,可以自动向任何SQL调用添加提交/回滚-如果可能,我会尝试对Websocket调用运行跟踪。我不应该这样做,它使用与所有其他DB调用相同的代码,并且它们能够毫无问题地进行更新。但这可能是问题所在——是的,绕道而行,而不是解决眼前问题的答案。但是你应该考虑不要使用SPY前缀(或者根本没有前缀)。sp_uu前缀可能会导致性能问题和许多其他隐藏的问题。我不知道,非常感谢^^