1
我想寫一個UPSERT語句來插入或更新包含幾何列的PostgresSQL數據庫中的一行。我的輸入是KML片段,只要KML有效,以下語句適用於我。在PostgreSQL/PostGIS語句中使用幾何變量
UPDATE area SET shape = ST_GeomFromKML('{the KML}') WHERE area_code = '{the area}';
INSERT INTO area(area_code, shape) SELECT '{the area}', ST_GeomFromKML('{the KML}') WHERE NOT EXISTS (SELECT 1 FROM area WHERE area_code = '{0}');
在情況下,它是有關我使用SqlCommand對象一個C#ASP.NET MVC應用程序中調用這個,但只要事作爲SQL語句是正確的,不應該。
我想要的更改是使用ST_IsValid和ST_MakeValid以確保該列是正確的。不幸的是,我最近的數據庫經驗主要是SQL Server和一些MySQL,而PostgresSQL語句似乎沒有以相同的方式處理變量。
我想是這樣的:
DECLARE @shape geometry;
SELECT @shape = ST_GeomFromKML('{the KML}');
IF NOT (ST_IsValid(@shape)) SELECT @shape = ST_MakeValid(@shape);
UPDATE area SET shape = @shape WHERE area_code = '{the area}';
INSERT INTO area(area_code, shape) SELECT '{the area}', @shape WHERE NOT EXISTS (SELECT 1 FROM area WHERE area_code = '{0}');
讓我檢查的有效性,並在代碼中,一旦糾正它。但是,即使在閱讀文檔後,我也不知道如何使用變量來完成此操作。
當你不需要結果時,你也可以使用DO語句 – 2014-10-28 10:42:00
工作過,我明白接下來的事情發生了什麼 – 2014-10-28 11:24:15
感謝Andy和歡迎來到PostgreSQL社區。你永遠不會回頭。 – Patrick 2014-10-28 11:27:25