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前缀可能会导致性能问题和许多其他隐藏的问题。我不知道,非常感谢^^