2015-12-25 2 views
0

J'ai une table comme celui-ciSQL Server; fonction STDistance ne fonctionne pas dans les déclarations de mise à jour

eventTable (Isfar peu, Lieu géographie)

Pas de problème avec l'instruction Select: Je peux simplement courir ceci sans erreur:

DECLARE @center AS GEOGRAPHY = GEOGRAPHY::Point(50, -160, 4326);   
SELECT * FROM EventTable WHERE @center.STDistance(Location) > 100000 

ne fonctionne pas avec la déclaration de mise à jour: mais quand je veux mettre à jour la colonne IsFar en fonction de la distance d'un certain point, il jeter exception

Incorrect syntax near '>'.

Voici le code:

DECLARE @center AS GEOGRAPHY = GEOGRAPHY::Point(50, -160, 4326);   
UPDATE EventTable SET IsFar = @center.STDistance(Location) > 100000 

Tout le monde peut expliquer pourquoi cela ne fonctionne pas?

Répondre

2

Vous devez ajouter Where clause

UPDATE EventTable SET IsFar = @center.STDistance(Location) 
where @center.STDistance(Location) > 100000 

Sur la base de votre commentaire

UPDATE eventtable 
SET isfar = CASE 
       WHEN @center.STDistance(location) > 100000 THEN 1 
       ELSE 0 
       END 

Si vous utilisez Sql Server 2012+ vous pouvez alors utiliser IIF

UPDATE eventtable 
SET isfar = IIF(@center.STDistance(location) > 100000, 1, 0) 

Remplacer 0 et 1 dans case déclaration en fonction de votre exigence

+0

Bonne idée, mais 'IsFar' est de type' 'bit' pas float' –

+0

@HosseinNarimaniRad - vérifier maintenant –

+0

Oui, il résout le problème, mais je ne me attendais pas à ce code bien et je J'ai surpris pourquoi SQL ne supportait pas cette syntaxe –