Déclencheur pour INSÉRER et mettre à JOUR sur la même table
comme nous le savons tous, entity framework ne pouvez pas tenir la géographie de données. Donc, mon idée était, pour indiquer la latitude et la longitude décimale dans mon modèle. Après l'exécution du script SQL de création des tables, je voudrais commencer un autre script pour ajouter une colonne géographique. Ensuite, je voudrais mettre à jour cette colonne sur chaque INSERTION ou de mise à JOUR (longitude et latitude) par un déclencheur. Est le trigger bon, ou est-ce quelque chose de mauvais? Je demande parce que je ne suis pas très familier avec déclencheur, mais il fonctionne pour l'instant.
CREATE TRIGGER Update_Geography
ON [People]
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @longitude DECIMAL(8, 5), @latitude DECIMAL(8, 5)
SET @longitude = (SELECT ins.Location_Longitude FROM inserted ins)
SET @latitude = (SELECT ins.Location_Latitude FROM inserted ins)
IF (@longitude != 0 AND @latitude != 0)
BEGIN
UPDATE [People]
SET
Location_Geography = geography::STGeomFromText('POINT(' + CONVERT(VARCHAR(100),@longitude) + ' ' + CONVERT(VARCHAR(100),@latitude) + ')',4326)
WHERE
Id = (SELECT ins.Id FROM inserted ins)
END
END
Serait heureux si quelqu'un pouvait m'aider.
Ce qui concerne
Edit:
script ressemble à ça:
ALTER TABLE [People] ADD Location_Geography AS (
CONVERT(GEOGRAPHY, CASE
WHEN Location_Latitude 0 AND Location_Longitude 0 THEN
geography::STGeomFromText('POINT(' + CONVERT(VARCHAR, Location_Longitude) + ' ' + CONVERT(VARCHAR, Location_Latitude) + ')',4326)
ELSE
NULL
END
)
)
fonctionne, mais ne permet pas d'interroger cette colonne :/
Thx
comment le modifier?
Voter pour cet élément de connexion: connect.microsoft.com/SQLServer/feedback/details/378126/...
OriginalL'auteur john | 2011-04-06
Vous devez vous connecter pour publier un commentaire.
Essayer une colonne CALCULÉE persistante: http://msdn.microsoft.com/en-us/library/ms191250.aspx (peut-être besoin d'un extérieur en fonte ici)
Cela évite d'avoir à faire un déclencheur avec à peu près le même effet d'ensemble.
Déclencheurs: http://msdn.microsoft.com/en-us/library/ms191524.aspx
Votre déclencheur pourrait probablement être modifié comme:
Voici un exemple montrant à la fois manuel et calc ed colonnes:
une colonne calculée persistante sera recalculé à chaque fois qu'une ligne est mise à jour, tout comme un déclencheur - jetez un oeil à la documentation en Ligne de lien. Un déclencheur peut être plus intelligent et de ne pas calculer les choses par la vérification pour voir si certaines colonnes changé, mais un déclencheur doit également veiller à ce qu'il opère sur l'ensemble de la insérés pseudo de la table et ne pas croire une seule ligne. La seule chose que vous pourriez avoir besoin de le vérifier est que la géométrie de la fonction est déterministe.
CAST/CONVERT
VARCHAR
àDATETIME
par exemple n'est pas déterministe, à MOINS d'un format fixe est spécifié.ok. alors. merci 🙂
J'ai posté alternative déclenchement de code ici pour vous.
désolé, mais j'obtiens un message d'erreur si j'essaie d'afficher le contenu de la table dans visual studio. Je vais mettre à jour mon premier post avec ce que j'ai fait.
OriginalL'auteur Cade Roux