как получить идентификатор строки на триггере вставки или обновления MSSQL-сервера - PullRequest
0 голосов
/ 23 мая 2018

Здесь у меня есть 2 триггера, они обновляют поле после вставки значений или обновления.Мой вопрос: как я могу убедиться, что я только обновляю значение в строке, которая была вставлена ​​или обновлена, мое обновление не включает ни одного предложения WHERE

CREATE TRIGGER LocUpdated  
ON [SqlDistance].[dbo].[DistantTest]  
AFTER  UPDATE   
AS   
IF ( UPDATE (Lat) OR UPDATE (Lon))  
BEGIN  

UPDATE [SqlDistance].[dbo].[DistantTest] 
SET [Geography2] = geography::STGeomFromText('POINT(' + CAST([Lon] AS VARCHAR(20)) + ' ' + 
                    CAST([lat] AS VARCHAR(20)) + ')', 4326)
END;  
GO 


CREATE TRIGGER LocInserted  
ON [SqlDistance].[dbo].[DistantTest]  
AFTER INSERT
AS   
BEGIN  

UPDATE [SqlDistance].[dbo].[DistantTest] 
SET [Geography2] = geography::STGeomFromText('POINT(' + CAST([Lon] AS VARCHAR(20)) + ' ' + 
                    CAST([lat] AS VARCHAR(20)) + ')', 4326)
END;  
GO 

1 Ответ

0 голосов
/ 23 мая 2018

Вы хотите сделать JOIN на inserted.Это псевдо-sql, при отсутствии таблицы DDL, однако, это должно вывести вас на правильный путь:

UPDATE D
SET [Geography2] = geography::STGeomFromText('POINT(' + CAST(i.[Lon] AS VARCHAR(20)) + ' ' + 
                    CAST(i.[lat] AS VARCHAR(20)) + ')', 4326)
FROM [dbo].[DistantTest] D --no need to declare the database, we're already in it.
     JOIN inserted i ON D.UniqueIdColumn = i.UniqueIdColumn;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...