Триггер таблицы SQL Server не вставляет значение - PullRequest
0 голосов
/ 15 ноября 2018

Я создаю триггер таблицы после вставки, который вставляет в другую таблицу. Все столбцы работают должным образом, но когда дело доходит до одного конкретного столбца (T_W_A.WorkAreaBuffer), в котором есть географические данные, он возвращается к нулю, и я не понимаю, почему. Когда я беру оператор select из триггера, все столбцы работают как положено. Вот копия информации, хранящейся в T_W_A.WorkAreaBuffer:

POLYGON((-80.0705872065121 33.0028430262796,-80.0706042845348 33.0027090648411,-80.0706520501637 33.0025804848199,-80.0707286676788 33.0024622274388,-80.0708311926384 33.0023588372123,-80.0709556850437 33.0022742873109,-80.0710973607543 33.0022118268834,-80.0712507753344 33.0021738562025,-80.0714100332675 33.0021618344308,-80.0715690144994 33.0021762235502,-80.071721609607 33.0022164706098,-80.0718619545597 33.002281028973,-80.071984656053 33.0023674177484,-80.0720849987596 33.0024723171218,-80.0721591265326 33.0025916959256,-80.072204190601 33.0027209665457,-80.072218459058 33.0028551612142,-80.0722013834361 33.0029891229132,-80.0721536198053 33.0031177035549,-80.0720770035815 33.0032359618221,-80.0719744790095 33.0033393530653,-80.0718499860293 33.0034239039594,-80.0717083088688 33.0034863652042,-80.0715548921845 33.0035243364028,-80.0713956318132 33.0035363583138,-80.0712366481804 33.0035219689339,-80.0710840510747 33.0034817212538,-80.0709437048309 33.0034171620046,-80.0708210029499 33.0033307722124,-80.0707206608182 33.0032258718464,-80.0706465344951 33.0031064922252,-80.0706014725309 33.0029772210874,-80.0705872065121 33.0028430262796))

Вот структура таблицы, в которую я вставляю:

CREATE TABLE [dbo].[training_grades]
(
    [Id] [BIGINT],
    [Number] [VARCHAR](24) NULL,
    [FirstTimeScore] INT,
    [prodarea] NVARCHAR(MAX) NULL
)

Вот структура заявки:

CREATE TABLE [dbo].[Ticket]
    (
        [TicketId] [BIGINT] primary key,
        [Number] [VARCHAR](24) NULL
    )

Вот структура T_W_A:

CREATE TABLE [dbo].[T_W_A]
        (
            [TicketId] [BIGINT] primary key foreign key,
            [WorkAreaBuffer] [TEXT] NULL
        )

Вот триггер:

CREATE TRIGGER TRG_InsertSyncEmp 
ON Ticket
AFTER INSERT 
AS
BEGIN
    INSERT INTO [dbo].[training_grades]
        SELECT 
            i.TicketId, 
            Number,
            CASE WHEN ia.FirstTime = 1 THEN 1 ELSE 0 END AS FirstTimeScore,
            tw.workareabuffer AS prodarea
        FROM 
            INSERTED i 
        LEFT JOIN 
            itemAtribute ia ON i.TicketId = ia.ItemId
        JOIN 
            T_W_A tw ON i.TicketId = tw.TicketId
END

tw.workareabuffer - это текстовый тип данных, и из того, что я прочитал, вы не можете вставить text поля, используя триггер.

Моим следующим шагом было создание представления T_W_A и приведение текстового поля к типу nvarchar (max), но результаты были такими же.

Это заставляет меня поверить, что с самим соединением что-то не так, но, как я уже сказал, когда я беру оператор select из триггера, он работает как положено.

Любые предложения, чтобы изолировать проблему?

1 Ответ

0 голосов
/ 15 ноября 2018

Сначала измените TEXT на NVARCHAR(MAX). TEXT устарело.

Во-вторых, при добавлении (из триггера) укажите имя столбца. Это поможет вам избежать проблем в будущем.

Теперь вы можете получить NULL, потому что вставляете в TICKET таблицу ДО вставки в T_W_A таблицу? Когда срабатывает триггер, никаких данных в таблице T_W_A нет (моё предположение).

...