更新Transact SQL链接表时出现太多行受影响错误

时间:2015-06-26 14:38:18

标签: sql-server tsql sql-update linked-server

我正在尝试使用此更新链接表...

tng_id

...但我收到以下错误......

  

链接服务器“LINKSERVERID”的OLE DB提供程序“MSDASQL”返回消息“键列信息不足或不正确。   更新会影响太多行。“。

仅供参考:my.txt是主键。

我该如何解决?

3 个答案:

答案 0 :(得分:4)

我认为你需要在select查询中包含密钥,所以试试这个:

update openquery(
  LINKSERVERID, 'select tng_id, tng_email from user_list where tng_id = 62873'
) set tng_email = 'blah@blah.com';

答案 1 :(得分:0)

我尝试了jpw上面的答案,但对我来说不起作用。

我开发了一个触发器,使用以下代码也收到了相同的错误:

begin

    if TRIGGER_NESTLEVEL() > 1
    return

    declare @JCid       int =   (select top 1   iJCMasterID from inserted)

    begin
        update L set uiJCTxCMLineNumber = NewLineNum
        from (
        select
            rank() over (order by idJCTxLines) NewLineNum
        ,   iJCMasterID
        ,   uiJCTxCMLineNumber
        ,   idJCTxLines
        from    _btblJCTxLines
        where iJCMasterID =  @JCid
        ) L
        where   iJCMasterID =  @JCid
    end
end
go

但是,我将其更改为:

begin

    if TRIGGER_NESTLEVEL() > 1
    return

    declare @JCid       int =   (select top 1   iJCMasterID from inserted)

    begin
        update L set uiJCTxCMLineNumber = NewLineNum
        from (
        select
            rank() over (order by idJCTxLines) NewLineNum
        ,   iJCMasterID
        ,   uiJCTxCMLineNumber
        ,   idJCTxLines
        from    _btblJCTxLines
        where iJCMasterID =  @JCid
        ) L
    join inserted i on L.idJCTxLines = i.idJCTxLines
    end
end
go

希望这会有所帮助。

答案 2 :(得分:0)

我通过向基础表添加唯一索引解决了这个错误。