0
update Calls 
set 
Call_Closed = GETDATE()
where CallId = 4266576;

我有一个名为调用的表。每当我尝试更新此表中的任何列时,都会引发错误。我已经在服务器中使用“sa”帐户登录,它是管理员帐户。上列日期类型是日期时间。此外,更新表中的任何列都会引发以下错误。

错误详情

*String or binary data would be truncated.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
The statement has been terminated.*

在桌子上触发

CREATE TRIGGER tgrMonitorDoneWho ON Calls
FOR INSERT,UPDATE
AS  
begin   

    DECLARE @ExecStr varchar(50), @Qry nvarchar(255)

    CREATE TABLE #inputbuffer 
    (
      EventType nvarchar(30), 
      Parameters int, 
      EventInfo nvarchar(255)
    )

    SET @ExecStr = 'DBCC INPUTBUFFER(' + STR(@@SPID) + ')'

    INSERT INTO #inputbuffer 
    EXEC (@ExecStr)

    SET @Qry = (SELECT EventInfo FROM #inputbuffer)


    INSERT INTO tblDoneWhoMonitor(CallId,DoneWho,Operation,Query)
    SELECT  case
            when inserted.CallId is null then deleted.CallId
            when deleted.CallId is null then inserted.CallId
            else deleted.CallId end,
            case
            when inserted.CallId is null then deleted.DoneWho
            when deleted.CallId is null then inserted.DoneWho
            else deleted.DoneWho end, 
            case
            when inserted.CallId is null then 'DELETE'
            when deleted.CallId is null then 'INSERT'
            else  'UPDATE' end,
            @Qry
    FROM inserted
    FULL OUTER JOIN deleted
    ON inserted.CallId = deleted.CallId
end
4

1 回答 1

0

EventInfo 列太小。将其更改为最大值。您还需要将 @Qry 更改为 nvarchar(max)。

CREATE TABLE #inputbuffer 
    (
      EventType nvarchar(30), 
      Parameters int, 
      EventInfo nvarchar(max)
    )

@Qry nvarchar(max)

反过来,您也需要修改 tblDoneWhoMonitor 的表定义以接受查询。

于 2016-10-20T13:23:51.317 回答