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

呼び出しという名前のテーブルがあります。このテーブルの列を更新しようとすると、エラーがスローされます。サーバーに「sa」アカウントでログインしましたが、これは管理者アカウントです。上記の列の datetype は日時です。また、テーブル内の列を更新すると、以下のエラーがスローされます。

エラーの詳細

*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 に答える