我正在创建一个插入后表触发器,该触发器将插入到另一个表中。所有列均按预期工作,但是当其中一个包含地理数据的特定列(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语句时,它按预期运行。
是否有解决问题的建议?
答案 0 :(得分:3)
首先,将TEXT
更改为NVARCHAR(MAX)
。 TEXT
已过时。
第二,当您添加(从触发器)时,请指定列名称。这将帮助您避免将来出现问题。
现在,您可能会得到NULL
,因为您要在插入TICKET
表之前插入T_W_A
表中?当触发器触发时,T_W_A
表中没有数据(我的猜测)。