diff --git a/DBG - get all tables size.sql b/DBG - get all tables size.sql
new file mode 100644
index 0000000..03e4758
--- /dev/null
+++ b/DBG - get all tables size.sql
@@ -0,0 +1,27 @@
+SELECT t.name AS TableName,
+ s.name AS SchemaName,
+ p.rows,
+ SUM(a.total_pages) * 8 AS TotalSpaceKB,
+ CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
+ SUM(a.used_pages) * 8 AS UsedSpaceKB,
+ CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
+ (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
+ CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
+FROM sys.tables t
+ INNER JOIN sys.indexes i
+ ON t.object_id = i.object_id
+ INNER JOIN sys.partitions p
+ ON i.object_id = p.object_id
+ AND i.index_id = p.index_id
+ INNER JOIN sys.allocation_units a
+ ON p.partition_id = a.container_id
+ LEFT OUTER JOIN sys.schemas s
+ ON t.schema_id = s.schema_id
+WHERE t.name NOT LIKE 'dt%'
+ AND t.is_ms_shipped = 0
+ AND i.object_id > 255
+GROUP BY t.name,
+ s.name,
+ p.rows
+ORDER BY p.rows DESC,
+ t.name;
\ No newline at end of file
diff --git a/EXPLOIT - check last jobs status.sql b/EXPLOIT - check last jobs status.sql
index 2a219a6..7df38d4 100644
--- a/EXPLOIT - check last jobs status.sql
+++ b/EXPLOIT - check last jobs status.sql
@@ -34,13 +34,13 @@ BEGIN
FROM [msdb].[dbo].[sysjobs] [s]
WHERE [s].[name] IN (
'zz_tsc OCTPDBA-440 supra'
- --,'__D70010 - After APSSynchroLoad'
- --,'_D73031 - SYNC - H Synchronize items and addresses - Central'
- --,'_D73061 - ITEM - 000 - Manage data before H synchronization - Central'
- --,'_D73071 - ITEM - Manage data after H synchronization - Central'
- --,'_D73110 - SYNC - V Synchronization extraction - Central'
- --,'D73130 - VESTA - SYNC - Interbase 2.0'
- --,'__D03011 - After working hours - Central'
+ ,'__D70010 - After APSSynchroLoad'
+ ,'_D73031 - SYNC - H Synchronize items and addresses - Central'
+ ,'_D73061 - ITEM - 000 - Manage data before H synchronization - Central'
+ ,'_D73071 - ITEM - Manage data after H synchronization - Central'
+ ,'_D73110 - SYNC - V Synchronization extraction - Central'
+ ,'D73130 - VESTA - SYNC - Interbase 2.0'
+ ,'__D03011 - After working hours - Central'
);
END
ELSE
diff --git a/EXPLOIT - drop all activepos subscriptions and rebuild.sql b/EXPLOIT - drop all activepos subscriptions and rebuild.sql
new file mode 100644
index 0000000..ed05c9d
--- /dev/null
+++ b/EXPLOIT - drop all activepos subscriptions and rebuild.sql
@@ -0,0 +1,22 @@
+
+IF OBJECT_ID('tempdb..#pos')IS NOT NULL BEGIN;
+ DROP TABLE #pos;
+END;
+
+SELECT pos.POS_hostname
+INTO #pos
+FROM [Arizona].[dbo].[Point_of_sale] [pos]
+WHERE [pos].[POS_active]=1
+AND [pos].[POS_type] IN (1,2)
+AND [pos].[POS_number] < 99
+
+;
+
+DECLARE @qry NVARCHAR(MAX)='';
+SELECT @qry = @qry + 'exec ActivePos_read..sp_dropsubscription @publication = N''ActivePosTran'', @article = N''all'', @subscriber ='''+POS_hostname+''';
+'
+FROM #pos;
+
+EXEC(@qry)
+EXEC ActiveSystemServer.dbo.RepairReplication
+
diff --git a/OCTPDBA-380 - data masker/.vs/OCTPDBA-380 - data masker/v15/.ssms_suo b/OCTPDBA-380 - data masker/.vs/OCTPDBA-380 - data masker/v15/.ssms_suo
new file mode 100644
index 0000000..56cb6be
Binary files /dev/null and b/OCTPDBA-380 - data masker/.vs/OCTPDBA-380 - data masker/v15/.ssms_suo differ
diff --git a/OCTPDBA-380 - data masker/OCTPDBA-380 - data masker.ssmssln b/OCTPDBA-380 - data masker/OCTPDBA-380 - data masker.ssmssln
new file mode 100644
index 0000000..d4b0341
--- /dev/null
+++ b/OCTPDBA-380 - data masker/OCTPDBA-380 - data masker.ssmssln
@@ -0,0 +1,21 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# SQL Server Management Studio Solution File, Format Version 18.00
+VisualStudioVersion = 15.0.28307.421
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{4F2E2C19-372F-40D8-9FA7-9D2138C6997A}") = "OCTPDBA-380 - data masker", "OCTPDBA-380 - data masker.ssmssqlproj", "{065596B0-CD09-44E7-8CE6-1BF9C9299364}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Default|Default = Default|Default
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {065596B0-CD09-44E7-8CE6-1BF9C9299364}.Default|Default.ActiveCfg = Default
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {0DC882E8-7E26-4802-B60A-4EC57D2966EA}
+ EndGlobalSection
+EndGlobal
diff --git a/OCTPDBA-380 - data masker/OCTPDBA-380 - data masker.ssmssqlproj b/OCTPDBA-380 - data masker/OCTPDBA-380 - data masker.ssmssqlproj
new file mode 100644
index 0000000..866799e
--- /dev/null
+++ b/OCTPDBA-380 - data masker/OCTPDBA-380 - data masker.ssmssqlproj
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+ 2023-01-31T13:25:51.2713026+01:00
+ SQL
+ (local)
+
+ Windows Authentication
+ master
+ 30
+ 0
+ NotSpecified
+ Microsoft SQL Server Management Studio - Query
+
+
+
+
+
+
+
+
+
+ alter ref tbl.sql
+
+
+
+
+
+ check after phcy.sql
+
+
+
+
+
+ check after repli and sync.sql
+
+
+
+
+
+ check before phcy.sql
+
+
+
+
+
+ check logic.sql
+
+
+
+
+
+ get ou from phcy.sql
+
+
+
+
+
+ npa dataset.sql
+
+
+ 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:(local):True
+ (local)
+
+ restore all.sql
+
+
+ 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:(local):True
+ (local)
+
+ temp idx.sql
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCTPDBA-380 - data masker/alter ref tbl.sql b/OCTPDBA-380 - data masker/alter ref tbl.sql
new file mode 100644
index 0000000..29f3888
--- /dev/null
+++ b/OCTPDBA-380 - data masker/alter ref tbl.sql
@@ -0,0 +1,17 @@
+USE ArizonaREP
+
+IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'address' AND TABLE_SCHEMA='dbo' AND COLUMN_NAME = 'phcy_ou_code')
+BEGIN
+ ALTER TABLE dbo.address ADD phcy_ou_code VARCHAR(15) NULL;
+END
+
+UPDATE a SET phcy_ou_code = ou.OU_code
+FROM dbo.Address a
+ JOIN [dbo].[Address_OU_link] l ON l.AOUL_address = a.Address_GUID
+ JOIN dbo.Organizational_unit ou ON ou.Organizational_unit_GUID = COALESCE(a.AD_update_OU, a.AD_creation_OU)
+WHERE a.phcy_ou_code IS NULL
+
+IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'address' AND TABLE_SCHEMA='dbo' AND COLUMN_NAME = 'phcy_ou_code')
+BEGIN
+ ALTER TABLE dbo.address DROP COLUMN phcy_ou_code;
+END
diff --git a/OCTPDBA-380 - data masker/check after phcy.sql b/OCTPDBA-380 - data masker/check after phcy.sql
new file mode 100644
index 0000000..7c42c6b
--- /dev/null
+++ b/OCTPDBA-380 - data masker/check after phcy.sql
@@ -0,0 +1,35 @@
+SELECT TOP 100
+ dm1.Address_ID
+ ,dm1.AD_first_name
+ ,dm1.AD_last_name
+ ,dm1.AD_middle_name
+ ,dm1.AD_name
+ --,LEFT(SUBSTRING(ad_name, 0, CHARINDEX(' ', AD_name, 0)), 30) AS first
+ --,UPPER(LEFT(SUBSTRING(ad_name, CHARINDEX(' ', AD_name, 0), 99), 30)) AS last
+ ,dm1.AD_address_1
+ ,dm1.AD_address_2
+ ,dm1.AD_address_3
+ ,dm1.AD_zip_code
+ ,dm1.AD_city
+
+FROM dbo.Address dm1
+ --JOIN dbo.Customer c ON c.CUST_add_turnover_to = dm1.address_id
+ --or c.cust_address = dm1.address_id
+ --or c.cust_bill_to = dm1.address_id
+ --or c.cust_send_bill_to = dm1.address_id
+ --or c.cust_ship_to = dm1.address_id
+WHERE EXISTS(
+ SELECT 1
+ FROM dbo.customer c
+ WHERE c.CUST_add_turnover_to = dm1.address_id
+ OR c.cust_address = dm1.address_id
+ or c.cust_bill_to = dm1.address_id
+ or c.cust_send_bill_to = dm1.address_id
+ or c.cust_ship_to = dm1.address_id
+)
+AND dm1.AD_sex <> 4
+
+
+SELECT *
+FROM ArizonaREP.dbo.Address a
+WHERE a.
\ No newline at end of file
diff --git a/OCTPDBA-380 - data masker/check after repli and sync.sql b/OCTPDBA-380 - data masker/check after repli and sync.sql
new file mode 100644
index 0000000..ca7aa38
--- /dev/null
+++ b/OCTPDBA-380 - data masker/check after repli and sync.sql
@@ -0,0 +1,63 @@
+USE master
+GO
+
+
+SELECT
+ 'phcy' AS src
+ ,dm1.Address_ID
+ ,dm1.AD_first_name
+ ,dm1.AD_last_name
+ ,dm1.AD_middle_name
+ ,dm1.AD_name
+ ,dm1.AD_address_1
+ ,dm1.AD_address_2
+ ,dm1.AD_address_3
+ ,dm1.AD_zip_code
+ ,dm1.AD_city
+ ,dm1.AD_sex
+
+FROM Arizona.dbo.Address dm1
+WHERE EXISTS(
+ SELECT 1
+ FROM Arizona.dbo.customer c
+ WHERE c.CUST_add_turnover_to = dm1.address_id
+ OR c.cust_address = dm1.address_id
+ or c.cust_bill_to = dm1.address_id
+ or c.cust_send_bill_to = dm1.address_id
+ or c.cust_ship_to = dm1.address_id
+)
+AND dm1.AD_sex <> 4
+AND dm1.Address_ID = 1500038158
+;
+
+
+SELECT
+ 'ref' AS src
+ ,dm1.Address_GUID
+ ,dm1.AD_first_name
+ ,dm1.AD_last_name
+ ,dm1.AD_middle_name
+ ,dm1.AD_name
+ ,dm1.AD_address_1
+ ,dm1.AD_address_2
+ ,dm1.AD_address_3
+ ,dm1.AD_zip_code
+ ,dm1.AD_city
+ ,dm1.AD_sex
+
+FROM ArizonaRep.dbo.Address dm1
+ JOIN ArizonaRep.[dbo].[Address_OU_link] l ON l.AOUL_address = dm1.Address_GUID
+ JOIN ArizonaRep.[dbo].[Organizational_unit] ou ON ou.Organizational_unit_GUID = l.AOUL_OU
+WHERE 1=1
+--AND EXISTS(
+-- SELECT 1
+-- FROM ArizonaRep.[dbo].[Organizational_unit] ou
+-- JOIN ArizonaRep.[dbo].[Address_OU_link] l ON l.AOUL_OU = ou.Organizational_unit_GUID
+-- WHERE ou.OU_code='705'
+-- AND l.AOUL_source_key = dm1.Address_GUID
+--)
+AND dm1.AD_sex <> 4
+AND ou.OU_code='705'
+AND l.AOUL_source_key = 1500038158
+;
+
diff --git a/OCTPDBA-380 - data masker/check before phcy.sql b/OCTPDBA-380 - data masker/check before phcy.sql
new file mode 100644
index 0000000..e0e2815
--- /dev/null
+++ b/OCTPDBA-380 - data masker/check before phcy.sql
@@ -0,0 +1,33 @@
+USE Arizona
+
+SELECT
+ dm1.AD_first_name
+ ,dm1.AD_last_name
+ ,dm1.AD_middle_name
+ ,dm1.AD_name
+ ,dm1.AD_address_1
+ ,dm1.AD_address_2
+ ,dm1.AD_address_3
+FROM dbo.Address dm1
+ --JOIN dbo.Customer c ON c.CUST_add_turnover_to = dm1.address_id
+ --or c.cust_address = dm1.address_id
+ --or c.cust_bill_to = dm1.address_id
+ --or c.cust_send_bill_to = dm1.address_id
+ --or c.cust_ship_to = dm1.address_id
+where exists(
+ select 1
+ from dbo.customer c
+ where c.CUST_add_turnover_to = dm1.address_id
+ or c.cust_address = dm1.address_id
+ or c.cust_bill_to = dm1.address_id
+ or c.cust_send_bill_to = dm1.address_id
+ or c.cust_ship_to = dm1.address_id
+)
+
+RETURN
+
+
+SELECT *
+FROM dbo.Address_category ac
+ JOIN dbo.Address_category_text act ON act.ADCT_address_category = ac.Address_category_ID
+WHERE act.ADCT_language = 1 --fr
diff --git a/OCTPDBA-380 - data masker/check logic.sql b/OCTPDBA-380 - data masker/check logic.sql
new file mode 100644
index 0000000..aef7a00
--- /dev/null
+++ b/OCTPDBA-380 - data masker/check logic.sql
@@ -0,0 +1,32 @@
+SELECT TOP 100
+ a.Address_GUID
+ , a.ad_name
+ , a.AD_creation_OU
+ , a.AD_update_OU
+ ,a.*
+FROM dbo.Address a
+WHERE 1=1
+AND EXISTS(
+ SELECT 1
+ FROM [dbo].[Organizational_unit] ou
+ JOIN [dbo].[Address_OU_link] l ON l.AOUL_OU = ou.Organizational_unit_GUID
+ WHERE ou.OU_code='705'
+ AND l.AOUL_address = a.Address_GUID
+)
+--AND ou.OU_code='705'
+--AND a.Address_GUID='9B30783A-FDD8-4B77-9B79-D5E70E327F56'
+ORDER BY a.AD_name
+
+
+RETURN
+
+SELECT
+ a.AD_creation_OU
+ ,*
+FROM dbo.Address a
+ JOIN [dbo].[Address_OU_link] l ON l.AOUL_address = a.Address_GUID
+WHERE l.AOUL_address='9B261B2E-6227-4540-BC42-9C509D219AD8'
+
+SELECT *
+FROM dbo.Organizational_unit
+WHERE Organizational_unit_GUID='BD710DD2-DC90-4DF0-91E6-84DBE5572469'
\ No newline at end of file
diff --git a/OCTPDBA-380 - data masker/get ou from phcy.sql b/OCTPDBA-380 - data masker/get ou from phcy.sql
new file mode 100644
index 0000000..883e311
--- /dev/null
+++ b/OCTPDBA-380 - data masker/get ou from phcy.sql
@@ -0,0 +1,22 @@
+SELECT
+ ou.OU_code,
+ ou.Organizational_unit_ID,
+ ou.OU_short_name,
+ ou.OU_pharmacy_code,
+ ou.OU_subsidiary
+FROM [Arizona].[dbo].[Bmc_application_key] [bak] WITH (NOLOCK)
+ JOIN [Arizona].[dbo].[Bmc_application_default] [bad] WITH (NOLOCK)
+ ON [bad].[BAPD_bmc_application_key] = [bak].[Bmc_application_key_ID]
+ JOIN [Arizona].[dbo].[Organizational_unit] OUA WITH (NOLOCK)
+ ON OUA.[Organizational_unit_ID] = [bad].[BAPD_value]
+ JOIN [Arizona].[dbo].[Organizational_unit] [ou] WITH(NOLOCK)
+ ON [ou].[OU_code] = [OUA].[OU_code]
+WHERE [bak].[BAPK_key] = 'cvCurrentOrganizationalUnit'
+
+SELECT TOP 100 l.AOUL_source_key, ou.*
+FROM ArizonaREP.dbo.Address a
+ JOIN ArizonaREP.[dbo].[Address_OU_link] l ON l.AOUL_address = a.Address_GUID
+ JOIN ArizonaREP.dbo.Organizational_unit ou ON ou.Organizational_unit_GUID = a.AD_creation_OU
+ OR ou.Organizational_unit_GUID = a.AD_update_OU
+WHERE AD_sex <> 4
+AND ad_name ='WINKELMANN Martin'
diff --git a/OCTPDBA-380 - data masker/npa dataset.sql b/OCTPDBA-380 - data masker/npa dataset.sql
new file mode 100644
index 0000000..19ad6fe
--- /dev/null
+++ b/OCTPDBA-380 - data masker/npa dataset.sql
@@ -0,0 +1,4436 @@
+--USE sandbox
+
+SELECT *
+FROM dbo.npa
+
+RETURN
+ALTER TABLE npa DROP COLUMN loc1
+EXEC sp_rename 'npa.loc2','city'
+
+--CREATE TABLE npa (
+--id INT IDENTITY
+--,npa INT NOT NULL
+--,loc1 VARCHAR(200) NOT NULL
+--,city VARCHAR(200)NOT NULL
+--)
+
+--INSERT INTO dbo.np (npa,
+-- loc1,
+-- loc2)
+--SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne 2','Lausanne 2'
+--UNION SELECT 1000,'Lausanne 3','Lausanne 3'
+--UNION SELECT 1000,'Lausanne Ouchy','Lausanne Ouchy'
+--UNION SELECT 1000,'Lausanne St-Paul','Lausanne St-Paul'
+--UNION SELECT 1000,'Lausanne Bellevaux','Lausanne Bellevaux'
+--UNION SELECT 1000,'Lausanne 12','Lausanne 12'
+--UNION SELECT 1000,'Lausanne 14','Lausanne 14'
+--UNION SELECT 1000,'Lausanne 16','Lausanne 16'
+--UNION SELECT 1000,'Lausanne 17','Lausanne 17'
+--UNION SELECT 1000,'Lausanne 19','Lausanne 19'
+--UNION SELECT 1000,'Lausanne Grangette','Lausanne Grangette'
+--UNION SELECT 1000,'Lausanne 22','Lausanne 22'
+--UNION SELECT 1000,'Lausanne Bourdon.','Lausanne Bourdonnette'
+--UNION SELECT 1000,'Lausanne 24','Lausanne 24 Vennes'
+--UNION SELECT 1000,'Lausanne 25','Lausanne 25'
+--UNION SELECT 1000,'Lausanne 26','Lausanne 26'
+--UNION SELECT 1000,'Lausanne 27','Lausanne 27'
+--UNION SELECT 1000,'Lausanne Dist','Lausanne Distribution'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1008,'Prilly','Prilly'
+--UNION SELECT 1009,'Pully','Pully'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne Adm cant','Lausanne Adm cant VD'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1000,'Lausanne','Lausanne'
+--UNION SELECT 1020,'Renens VD','Renens VD'
+--UNION SELECT 1020,'Renens VD 1','Renens VD 1'
+--UNION SELECT 1020,'Renens VD Village','Renens VD Village'
+--UNION SELECT 1023,'Crissier','Crissier'
+--UNION SELECT 1024,'Ecublens VD','Ecublens VD'
+--UNION SELECT 1025,'St-Sulpice VD','St-Sulpice VD'
+--UNION SELECT 1026,'Echandens-Denges','Echandens-Denges'
+--UNION SELECT 1027,'Lonay','Lonay'
+--UNION SELECT 1030,'Bussigny','Bussigny'
+--UNION SELECT 1032,'Romanel-s-Lausanne','Romanel-sur-Lausanne'
+--UNION SELECT 1033,'Cheseaux-Lausanne','Cheseaux-sur-Lausanne'
+--UNION SELECT 1038,'Bercher','Bercher'
+--UNION SELECT 1040,'Echallens','Echallens'
+--UNION SELECT 1377,'Oulens-Echallens','Oulens-sous-Echallens'
+--UNION SELECT 1042,'Bettens','Bettens'
+--UNION SELECT 1040,'Villars-le-Terroir','Villars-le-Terroir'
+--UNION SELECT 1417,'Epautheyres','Epautheyres'
+--UNION SELECT 1041,'Dommartin','Dommartin'
+--UNION SELECT 1063,'Peyres-Possens','Peyres-Possens'
+--UNION SELECT 1063,'Boulens','Boulens'
+--UNION SELECT 1041,'Poliez-le-Grand','Poliez-le-Grand'
+--UNION SELECT 1041,'Poliez-Pittet','Poliez-Pittet'
+--UNION SELECT 1041,'Bottens','Bottens'
+--UNION SELECT 1053,'Bretigny-Morrens','Bretigny-sur-Morrens'
+--UNION SELECT 1034,'Boussens','Boussens'
+--UNION SELECT 1035,'Bournens','Bournens'
+--UNION SELECT 1036,'Sullens','Sullens'
+--UNION SELECT 1042,'Assens','Assens'
+--UNION SELECT 1043,'Sugnens','Sugnens'
+--UNION SELECT 1044,'Fey','Fey'
+--UNION SELECT 1045,'Ogens','Ogens'
+--UNION SELECT 1407,'Bioley-Magnoux','Bioley-Magnoux'
+--UNION SELECT 1042,'Bioley-Orjulaz','Bioley-Orjulaz'
+--UNION SELECT 1052,'Mont-sur-Lausanne','Le Mont-sur-Lausanne'
+--UNION SELECT 1053,'Cugy VD','Cugy VD'
+--UNION SELECT 1054,'Morrens VD','Morrens VD'
+--UNION SELECT 1055,'Froideville','Froideville'
+--UNION SELECT 1410,'Thierrens','Thierrens'
+--UNION SELECT 1066,'Epalinges','Epalinges'
+--UNION SELECT 1073,'Savigny','Savigny'
+--UNION SELECT 1092,'Belmont-Lausanne','Belmont-sur-Lausanne'
+--UNION SELECT 1093,'La Conversion','La Conversion'
+--UNION SELECT 1094,'Paudex','Paudex'
+--UNION SELECT 1095,'Lutry','Lutry'
+--UNION SELECT 1096,'Cully','Cully'
+--UNION SELECT 1097,'Riex','Riex'
+--UNION SELECT 1098,'Epesses','Epesses'
+--UNION SELECT 1058,'Villars-Tiercelin','Villars-Tiercelin'
+--UNION SELECT 1059,'Peney-le-Jorat','Peney-le-Jorat'
+--UNION SELECT 1061,'Villars-Mendraz','Villars-Mendraz'
+--UNION SELECT 1062,'Sottens','Sottens'
+--UNION SELECT 1063,'Chapelle-s-Moudon','Chapelle-sur-Moudon'
+--UNION SELECT 1410,'St-Cierges','St-Cierges'
+--UNION SELECT 1073,'Mollie-Margot','Mollie-Margot'
+--UNION SELECT 1080,'Les Cullayes','Les Cullayes'
+--UNION SELECT 1081,'Montpreveyres','Montpreveyres'
+--UNION SELECT 1082,'Corcelles-le-Jorat','Corcelles-le-Jorat'
+--UNION SELECT 1088,'Ropraz','Ropraz'
+--UNION SELECT 1084,'Carrouge VD','Carrouge VD'
+--UNION SELECT 1085,'Vulliens','Vulliens'
+--UNION SELECT 1509,'Vucherens','Vucherens'
+--UNION SELECT 1510,'Syens','Syens'
+--UNION SELECT 1076,'Ferlens VD','Ferlens VD'
+--UNION SELECT 1077,'Servion','Servion'
+--UNION SELECT 1078,'Essertes','Essertes'
+--UNION SELECT 1673,'Auboranges','Auboranges'
+--UNION SELECT 1110,'Morges','Morges'
+--UNION SELECT 1110,'Morges 1','Morges 1'
+--UNION SELECT 1110,'Morges 2','Morges 2'
+--UNION SELECT 1112,'Echichens','Echichens'
+--UNION SELECT 1167,'Lussy-sur-Morges','Lussy-sur-Morges'
+--UNION SELECT 1132,'Lully VD','Lully VD'
+--UNION SELECT 1131,'Tolochenaz','Tolochenaz'
+--UNION SELECT 1125,'Monnaz','Monnaz'
+--UNION SELECT 1126,'Vaux-sur-Morges','Vaux-sur-Morges'
+--UNION SELECT 1127,'Clarmont','Clarmont'
+--UNION SELECT 1128,'Reverolle','Reverolle'
+--UNION SELECT 1113,'St-Saphorin-Morges','St-Saphorin-sur-Morges'
+--UNION SELECT 1114,'Colombier VD','Colombier VD'
+--UNION SELECT 1115,'Vullierens','Vullierens'
+--UNION SELECT 1116,'Cottens VD','Cottens VD'
+--UNION SELECT 1117,'Grancy','Grancy'
+--UNION SELECT 1304,'Senarclens','Senarclens'
+--UNION SELECT 1121,'Bremblens','Bremblens'
+--UNION SELECT 1122,'Romanel-sur-Morges','Romanel-sur-Morges'
+--UNION SELECT 1123,'Aclens','Aclens'
+--UNION SELECT 1124,'Gollion','Gollion'
+--UNION SELECT 1135,'Denens','Denens'
+--UNION SELECT 1136,'Bussy-Chardonney','Bussy-Chardonney'
+--UNION SELECT 1169,'Yens','Yens'
+--UNION SELECT 1168,'Villars-sous-Yens','Villars-sous-Yens'
+--UNION SELECT 1144,'Ballens','Ballens'
+--UNION SELECT 1149,'Berolle','Berolle'
+--UNION SELECT 1146,'Mollens VD','Mollens VD'
+--UNION SELECT 1147,'Montricher','Montricher'
+--UNION SELECT 1142,'Pampigny','Pampigny'
+--UNION SELECT 1143,'Apples','Apples'
+--UNION SELECT 1148,'L''Isle','L''Isle'
+--UNION SELECT 1162,'St-Prex','St-Prex'
+--UNION SELECT 1163,'Etoy','Etoy'
+--UNION SELECT 1164,'Buchillon','Buchillon'
+--UNION SELECT 1165,'Allaman','Allaman'
+--UNION SELECT 1166,'Perroy','Perroy'
+--UNION SELECT 1170,'Aubonne','Aubonne'
+--UNION SELECT 1172,'Bougy-Villars','Bougy-Villars'
+--UNION SELECT 1174,'Montherod','Montherod'
+--UNION SELECT 1175,'Lavigny','Lavigny'
+--UNION SELECT 1176,'St-Livres','St-Livres'
+--UNION SELECT 1180,'Rolle','Rolle'
+--UNION SELECT 1182,'Gilly','Gilly'
+--UNION SELECT 1183,'Bursins','Bursins'
+--UNION SELECT 1184,'Vinzel','Vinzel'
+--UNION SELECT 1184,'Luins','Luins'
+--UNION SELECT 1185,'Mont-sur-Rolle','Mont-sur-Rolle'
+--UNION SELECT 1186,'Essertines-Rolle','Essertines-sur-Rolle'
+--UNION SELECT 1187,'St-Oyens','St-Oyens'
+--UNION SELECT 1189,'Saubraz','Saubraz'
+--UNION SELECT 1188,'Gimel','Gimel'
+--UNION SELECT 1196,'Gland','Gland'
+--UNION SELECT 1197,'Prangins','Prangins'
+--UNION SELECT 1212,'Grand-Lancy','Grand-Lancy'
+--UNION SELECT 1212,'Grand-Lancy 1','Grand-Lancy 1'
+--UNION SELECT 1213,'Petit-Lancy','Petit-Lancy'
+--UNION SELECT 1213,'Petit-Lancy 1','Petit-Lancy 1'
+--UNION SELECT 1213,'Petit-Lancy 2','Petit-Lancy 2'
+--UNION SELECT 1213,'Onex','Onex'
+--UNION SELECT 1214,'Vernier','Vernier'
+--UNION SELECT 1216,'Cointrin','Cointrin'
+--UNION SELECT 1217,'Meyrin','Meyrin'
+--UNION SELECT 1217,'Meyrin 1','Meyrin 1'
+--UNION SELECT 1217,'Meyrin 2','Meyrin 2'
+--UNION SELECT 1218,'Le Grand-Saconnex','Le Grand-Saconnex'
+--UNION SELECT 1219,'Le Lignon','Le Lignon'
+--UNION SELECT 1220,'Les Avanchets','Les Avanchets'
+--UNION SELECT 1223,'Cologny','Cologny'
+--UNION SELECT 1227,'Carouge GE','Carouge GE'
+--UNION SELECT 1227,'Les Acacias','Les Acacias'
+--UNION SELECT 1228,'Plan-les-Ouates','Plan-les-Ouates'
+--UNION SELECT 1231,'Conches','Conches'
+--UNION SELECT 1232,'Confignon','Confignon'
+--UNION SELECT 1233,'Bernex','Bernex'
+--UNION SELECT 1234,'Vessy','Vessy'
+--UNION SELECT 1236,'Cartigny','Cartigny'
+--UNION SELECT 1237,'Avully','Avully'
+--UNION SELECT 1239,'Collex','Collex'
+--UNION SELECT 1241,'Puplinge','Puplinge'
+--UNION SELECT 1242,'Satigny','Satigny'
+--UNION SELECT 1243,'Presinge','Presinge'
+--UNION SELECT 1244,'Choulex','Choulex'
+--UNION SELECT 1245,'Collonge-Bellerive','Collonge-Bellerive'
+--UNION SELECT 1246,'Corsier GE','Corsier GE'
+--UNION SELECT 1248,'Hermance','Hermance'
+--UNION SELECT 1251,'Gy','Gy'
+--UNION SELECT 1252,'Meinier','Meinier'
+--UNION SELECT 1253,'Vandoeuvres','Vandoeuvres'
+--UNION SELECT 1254,'Jussy','Jussy'
+--UNION SELECT 1255,'Veyrier','Veyrier'
+--UNION SELECT 1256,'Troinex','Troinex'
+--UNION SELECT 1257,'La Croix-de-Rozon','La Croix-de-Rozon'
+--UNION SELECT 1258,'Perly','Perly'
+--UNION SELECT 1260,'Nyon','Nyon'
+--UNION SELECT 1260,'Nyon 1 Dist','Nyon 1 Distribution'
+--UNION SELECT 1277,'Borex','Borex'
+--UNION SELECT 1278,'La Rippe','La Rippe'
+--UNION SELECT 1279,'Chavannes-de-Bogis','Chavannes-de-Bogis'
+--UNION SELECT 1274,'Grens','Grens'
+--UNION SELECT 1276,'Gingins','Gingins'
+--UNION SELECT 1271,'Givrins','Givrins'
+--UNION SELECT 1272,'Genolier','Genolier'
+--UNION SELECT 1273,'Arzier-Le Muids','Arzier-Le Muids'
+--UNION SELECT 1268,'Burtigny','Burtigny'
+--UNION SELECT 1261,'Marchissy','Marchissy'
+--UNION SELECT 1261,'Le Vaud','Le Vaud'
+--UNION SELECT 1269,'Bassins','Bassins'
+--UNION SELECT 1261,'Longirod','Longirod'
+--UNION SELECT 1188,'St-George','St-George'
+--UNION SELECT 1262,'Eysins','Eysins'
+--UNION SELECT 1263,'Crassier','Crassier'
+--UNION SELECT 1264,'St-Cergue','St-Cergue'
+--UNION SELECT 1265,'La Cure','La Cure'
+--UNION SELECT 1266,'Duillier','Duillier'
+--UNION SELECT 1268,'Begnins','Begnins'
+--UNION SELECT 1281,'Russin','Russin'
+--UNION SELECT 1283,'Dardagny','Dardagny'
+--UNION SELECT 1283,'La Plaine','La Plaine'
+--UNION SELECT 1284,'Chancy','Chancy'
+--UNION SELECT 1285,'Athenaz Avusy','Athenaz Avusy'
+--UNION SELECT 1286,'Soral','Soral'
+--UNION SELECT 1287,'Laconnex','Laconnex'
+--UNION SELECT 1288,'Aire-la-Ville','Aire-la-Ville'
+--UNION SELECT 1290,'Versoix','Versoix'
+--UNION SELECT 1291,'Commugny','Commugny'
+--UNION SELECT 1293,'Bellevue','Bellevue'
+--UNION SELECT 1294,'Genthod','Genthod'
+--UNION SELECT 1296,'Coppet','Coppet'
+--UNION SELECT 1297,'Founex','Founex'
+--UNION SELECT 1299,'Crans VD','Crans VD'
+--UNION SELECT 1302,'Vufflens-la-Ville','Vufflens-la-Ville'
+--UNION SELECT 1304,'Cossonay-Ville','Cossonay-Ville'
+--UNION SELECT 1304,'Dizy','Dizy'
+--UNION SELECT 1307,'Lussery-Villars','Lussery-Villars'
+--UNION SELECT 1305,'Penthalaz','Penthalaz'
+--UNION SELECT 1315,'La Sarraz','La Sarraz'
+--UNION SELECT 1317,'Orny','Orny'
+--UNION SELECT 1316,'Chevilly','Chevilly'
+--UNION SELECT 1337,'Vallorbe','Vallorbe'
+--UNION SELECT 1338,'Ballaigues','Ballaigues'
+--UNION SELECT 1341,'L''Orient','L''Orient'
+--UNION SELECT 1346,'Les Bioux','Les Bioux'
+--UNION SELECT 1344,'L''Abbaye','L''Abbaye'
+--UNION SELECT 1342,'Le Pont','Le Pont'
+--UNION SELECT 1345,'Le Lieu','Le Lieu'
+--UNION SELECT 1347,'Le Sentier','Le Sentier'
+--UNION SELECT 1348,'Le Brassus','Le Brassus'
+--UNION SELECT 1306,'Daillens','Daillens'
+--UNION SELECT 1303,'Penthaz','Penthaz'
+--UNION SELECT 1308,'La Chaux-Cossonay','La Chaux Cossonay'
+--UNION SELECT 1148,'Cuarnens','Cuarnens'
+--UNION SELECT 1313,'Ferreyres','Ferreyres'
+--UNION SELECT 1148,'Moiry VD','Moiry VD'
+--UNION SELECT 1321,'Arnex-sur-Orbe','Arnex-sur-Orbe'
+--UNION SELECT 1318,'Pompaples','Pompaples'
+--UNION SELECT 1322,'Croy','Croy'
+--UNION SELECT 1324,'Premier','Premier'
+--UNION SELECT 1325,'Vaulion','Vaulion'
+--UNION SELECT 1326,'Juriens','Juriens'
+--UNION SELECT 1148,'La Praz','La Praz'
+--UNION SELECT 1148,'Mont-la-Ville','Mont-la-Ville'
+--UNION SELECT 1350,'Orbe','Orbe'
+--UNION SELECT 1352,'Agiez','Agiez'
+--UNION SELECT 1353,'Bofflens','Bofflens'
+--UNION SELECT 1354,'Montcherand','Montcherand'
+--UNION SELECT 1355,'L''Abergement','L''Abergement'
+--UNION SELECT 1357,'Lignerolle','Lignerolle'
+--UNION SELECT 1358,'Valeyres-Rances','Valeyres-sous-Rances'
+--UNION SELECT 1439,'Rances','Rances'
+--UNION SELECT 1373,'Chavornay','Chavornay'
+--UNION SELECT 1372,'Bavois','Bavois'
+--UNION SELECT 1374,'Corcelles-Chavorn','Corcelles-sur-Chavornay'
+--UNION SELECT 1376,'Goumoens-la-Ville','Goumoens-la-Ville'
+--UNION SELECT 1400,'Yverdon-les-Bains','Yverdon-les-Bains'
+--UNION SELECT 1400,'Yverdon 1','Yverdon-les-Bains 1'
+--UNION SELECT 1400,'Yverdon 2','Yverdon 2'
+--UNION SELECT 1400,'Yverdon-les-Bains','Yverdon-les-Bains'
+--UNION SELECT 1417,'Essertines-Yverdon','Essertines-sur-Yverdon'
+--UNION SELECT 1416,'Pailly','Pailly'
+--UNION SELECT 1418,'Vuarrens','Vuarrens'
+--UNION SELECT 1420,'Fiez','Fiez'
+--UNION SELECT 1421,'Fontaines-Grandson','Fontaines-sur-Grandson'
+--UNION SELECT 1423,'Villars-Burquin','Villars-Burquin'
+--UNION SELECT 1453,'Mauborget','Mauborget'
+--UNION SELECT 1429,'Giez','Giez'
+--UNION SELECT 1430,'Orges','Orges'
+--UNION SELECT 1431,'Vugelles-La Mothe','Vugelles-La Mothe'
+--UNION SELECT 1405,'Pomy','Pomy'
+--UNION SELECT 1406,'Cronay','Cronay'
+--UNION SELECT 1407,'Donneloye','Donneloye'
+--UNION SELECT 1408,'Prahins','Prahins'
+--UNION SELECT 1412,'Valeyres-Ursins','Valeyres-sous-Ursins'
+--UNION SELECT 1413,'Orzens','Orzens'
+--UNION SELECT 1046,'Rueyres','Rueyres'
+--UNION SELECT 1404,'Cuarny','Cuarny'
+--UNION SELECT 1427,'Bonvillars','Bonvillars'
+--UNION SELECT 1424,'Champagne','Champagne'
+--UNION SELECT 1431,'Novalles','Novalles'
+--UNION SELECT 1423,'Fontanezier','Fontanezier'
+--UNION SELECT 1415,'Molondin','Molondin'
+--UNION SELECT 1422,'Grandson','Grandson'
+--UNION SELECT 1425,'Onnens VD','Onnens VD'
+--UNION SELECT 1426,'Concise','Concise'
+--UNION SELECT 1432,'Belmont-Yverdon','Belmont-sur-Yverdon'
+--UNION SELECT 1433,'Suchy','Suchy'
+--UNION SELECT 1434,'Ependes VD','Ependes VD'
+--UNION SELECT 1435,'Essert-Pittet','Essert-Pittet'
+--UNION SELECT 1436,'Treycovagnes','Treycovagnes'
+--UNION SELECT 1438,'Mathod','Mathod'
+--UNION SELECT 1441,'Valeyres-Montagny','Valeyres-sous-Montagny'
+--UNION SELECT 1443,'Champvent','Champvent'
+--UNION SELECT 1445,'Vuiteboeuf','Vuiteboeuf'
+--UNION SELECT 1446,'Baulmes','Baulmes'
+--UNION SELECT 1450,'Ste-Croix','Ste-Croix'
+--UNION SELECT 1450,'La Sagne VD','La Sagne Ste-Croix'
+--UNION SELECT 1454,'L''Auberson','L''Auberson'
+--UNION SELECT 1452,'Les Rasses','Les Rasses'
+--UNION SELECT 1453,'Bullet','Bullet'
+--UNION SELECT 1462,'Yvonand','Yvonand'
+--UNION SELECT 1463,'Rovray','Rovray'
+--UNION SELECT 1468,'Cheyres','Cheyres'
+--UNION SELECT 1470,'Estavayer-le-Lac','Estavayer-le-Lac'
+--UNION SELECT 1473,'Font','Font'
+--UNION SELECT 1483,'Montet Broye','Montet Broye'
+--UNION SELECT 1482,'Cugy FR','Cugy FR'
+--UNION SELECT 1541,'Bussy FR','Bussy FR'
+--UNION SELECT 1484,'Aumont','Aumont'
+--UNION SELECT 1485,'Nuvilly','Nuvilly'
+--UNION SELECT 1486,'Vuissens','Vuissens'
+--UNION SELECT 1537,'Champtauroz','Champtauroz'
+--UNION SELECT 1538,'Treytorrens-Payern','Treytorrens Payerne'
+--UNION SELECT 1489,'Murist','Murist'
+--UNION SELECT 1510,'Moudon','Moudon'
+--UNION SELECT 1512,'Chavannes-s-Moudon','Chavannes-sur-Moudon'
+--UNION SELECT 1513,'Hermenches','Hermenches'
+--UNION SELECT 1514,'Bussy-sur-Moudon','Bussy-sur-Moudon'
+--UNION SELECT 1522,'Oulens-sur-Lucens','Oulens-sur-Lucens'
+--UNION SELECT 1515,'Villars-le-Comte','Villars-le-Comte'
+--UNION SELECT 1515,'Neyruz-sur-Moudon','Neyruz-sur-Moudon'
+--UNION SELECT 1410,'Denezy','Denezy'
+--UNION SELECT 1522,'Lucens','Lucens'
+--UNION SELECT 1521,'Curtilles','Curtilles'
+--UNION SELECT 1527,'Villeneuve FR','Villeneuve FR'
+--UNION SELECT 1528,'Surpierre','Surpierre'
+--UNION SELECT 1529,'Cheiry','Cheiry'
+--UNION SELECT 1530,'Payerne','Payerne'
+--UNION SELECT 1534,'Sassel','Sassel'
+--UNION SELECT 1536,'Combremont-Petit','Combremont-le-Petit'
+--UNION SELECT 1526,'Forel-sur-Lucens','Forel-sur-Lucens'
+--UNION SELECT 1526,'Cremin','Cremin'
+--UNION SELECT 1543,'Grandcour','Grandcour'
+--UNION SELECT 1544,'Gletterens','Gletterens'
+--UNION SELECT 1545,'Chevroux','Chevroux'
+--UNION SELECT 1551,'Vers-chez-Perrin','Vers-chez-Perrin'
+--UNION SELECT 1552,'Trey','Trey'
+--UNION SELECT 1555,'Villarzel','Villarzel'
+--UNION SELECT 1682,'Villars-Bramard','Villars-Bramard'
+--UNION SELECT 1682,'Dompierre VD','Dompierre VD'
+--UNION SELECT 1535,'Combremont-Grand','Combremont-le-Grand'
+--UNION SELECT 1563,'Dompierre FR','Dompierre FR'
+--UNION SELECT 1564,'Domdidier','Domdidier'
+--UNION SELECT 1565,'Missy','Missy'
+--UNION SELECT 1475,'Autavaux','Autavaux'
+--UNION SELECT 1567,'Delley','Delley'
+--UNION SELECT 1568,'Portalban','Portalban'
+--UNION SELECT 1566,'St-Aubin FR','St-Aubin FR'
+--UNION SELECT 1580,'Avenches','Avenches'
+--UNION SELECT 1583,'Villarepos','Villarepos'
+--UNION SELECT 1584,'Villars-le-Grand','Villars-le-Grand'
+--UNION SELECT 1585,'Salavaux','Salavaux'
+--UNION SELECT 1586,'Vallamand','Vallamand'
+--UNION SELECT 1587,'Montmagny','Montmagny'
+--UNION SELECT 1589,'Chabrey','Chabrey'
+--UNION SELECT 1587,'Constantine','Constantine'
+--UNION SELECT 1588,'Cudrefin','Cudrefin'
+--UNION SELECT 1595,'Faoug','Faoug'
+--UNION SELECT 1673,'Ecublens FR','Ecublens FR'
+--UNION SELECT 1525,'Henniez','Henniez'
+--UNION SELECT 1524,'Marnand','Marnand'
+--UNION SELECT 1090,'La Croix Lutry','La Croix Lutry'
+--UNION SELECT 1091,'Grandvaux','Grandvaux'
+--UNION SELECT 1091,'Aran','Aran'
+--UNION SELECT 1070,'Puidoux','Puidoux'
+--UNION SELECT 1071,'Chexbres','Chexbres'
+--UNION SELECT 1072,'Forel Lavaux','Forel Lavaux'
+--UNION SELECT 1614,'Granges Veveyse','Granges Veveyse'
+--UNION SELECT 1615,'Bossonnens','Bossonnens'
+--UNION SELECT 1616,'Attalens','Attalens'
+--UNION SELECT 1617,'Remaufens','Remaufens'
+--UNION SELECT 1619,'Les Paccots','Les Paccots'
+--UNION SELECT 1623,'Semsales','Semsales'
+--UNION SELECT 1624,'La Verrerie','La Verrerie'
+--UNION SELECT 1627,'Vaulruz','Vaulruz'
+--UNION SELECT 1628,'Vuadens','Vuadens'
+--UNION SELECT 1630,'Bulle','Bulle'
+--UNION SELECT 1633,'Vuippens','Vuippens'
+--UNION SELECT 1642,'Sorens','Sorens'
+--UNION SELECT 1643,'Gumefens','Gumefens'
+--UNION SELECT 1644,'Avry-devant-Pont','Avry-devant-Pont'
+--UNION SELECT 1645,'Le Bry','Le Bry'
+--UNION SELECT 1646,'Echarlens','Echarlens'
+--UNION SELECT 1648,'Hauteville','Hauteville'
+--UNION SELECT 1656,'Im Fang','Im Fang'
+--UNION SELECT 1656,'Jaun','Jaun'
+--UNION SELECT 1654,'Cerniat FR','Cerniat FR'
+--UNION SELECT 1651,'Villarvolard','Villarvolard'
+--UNION SELECT 1652,'Botterens','Botterens'
+--UNION SELECT 1638,'Morlon','Morlon'
+--UNION SELECT 1632,'Riaz','Riaz'
+--UNION SELECT 1633,'Marsens','Marsens'
+--UNION SELECT 1634,'La Roche FR','La Roche FR'
+--UNION SELECT 1649,'Pont-la-Ville','Pont-la-Ville'
+--UNION SELECT 1636,'Broc','Broc'
+--UNION SELECT 1663,'Pringy','Pringy'
+--UNION SELECT 1665,'Estavannens','Estavannens'
+--UNION SELECT 1667,'Enney','Enney'
+--UNION SELECT 1669,'Neirivue','Neirivue'
+--UNION SELECT 1669,'Albeuve','Albeuve'
+--UNION SELECT 1663,'Epagny','Epagny'
+--UNION SELECT 1666,'Grandvillard','Grandvillard'
+--UNION SELECT 1610,'Oron-la-Ville','Oron-la-Ville'
+--UNION SELECT 1675,'Vauderens','Vauderens'
+--UNION SELECT 1670,'Ursy','Ursy'
+--UNION SELECT 1674,'Vuarmarens','Vuarmarens'
+--UNION SELECT 1673,'Rue','Rue'
+--UNION SELECT 1673,'Promasens','Promasens'
+--UNION SELECT 1678,'Siviriez','Siviriez'
+--UNION SELECT 1679,'Villaraboud','Villaraboud'
+--UNION SELECT 1676,'Chavannes-Forts','Chavannes-les-Forts'
+--UNION SELECT 1677,'Prez-vers-Siviriez','Prez-vers-Siviriez'
+--UNION SELECT 1680,'Romont FR','Romont FR'
+--UNION SELECT 1681,'Billens','Billens'
+--UNION SELECT 1683,'Brenles','Brenles'
+--UNION SELECT 1683,'Chesalles-Moudon','Chesalles-sur-Moudon'
+--UNION SELECT 1694,'Orsonnens','Orsonnens'
+--UNION SELECT 1694,'Villarsiviriaux','Villarsiviriaux'
+--UNION SELECT 1695,'Villarlod','Villarlod'
+--UNION SELECT 1696,'Vuisternens-Ogoz','Vuisternens-en-Ogoz'
+--UNION SELECT 1685,'Villariaz','Villariaz'
+--UNION SELECT 1688,'Sommentier','Sommentier'
+--UNION SELECT 1626,'Romanens','Romanens'
+--UNION SELECT 1692,'Massonnens','Massonnens'
+--UNION SELECT 1687,'Vuisternens-Romont','Vuisternens-devant-Romont'
+--UNION SELECT 1612,'Ecoteaux','Ecoteaux'
+--UNION SELECT 1613,'Maracon','Maracon'
+--UNION SELECT 1609,'St-Martin FR','St-Martin FR'
+--UNION SELECT 1697,'La Joux FR','La Joux FR'
+--UNION SELECT 1699,'Bouloz','Bouloz'
+--UNION SELECT 1699,'Porsel','Porsel'
+--UNION SELECT 1699,'Pont Veveyse','Pont Veveyse'
+--UNION SELECT 1700,'Fribourg','Fribourg'
+--UNION SELECT 1700,'Fribourg 1','Fribourg 1'
+--UNION SELECT 1700,'Fribourg','Fribourg'
+--UNION SELECT 1700,'Fribourg','Fribourg'
+--UNION SELECT 1700,'Fribourg','Fribourg'
+--UNION SELECT 1700,'Fribourg','Fribourg'
+--UNION SELECT 1763,'Granges-Paccot','Granges-Paccot'
+--UNION SELECT 1700,'Fribourg 1 Dist','Fribourg 1 Distribution'
+--UNION SELECT 1700,'Fribourg','Fribourg'
+--UNION SELECT 1720,'Corminboeuf','Corminboeuf'
+--UNION SELECT 1721,'Misery-Courtion','Misery-Courtion'
+--UNION SELECT 1735,'Giffers','Giffers'
+--UNION SELECT 1736,'St. Silvester','St. Silvester'
+--UNION SELECT 1737,'Plasselb','Plasselb'
+--UNION SELECT 1738,'Sangernboden','Sangernboden'
+--UNION SELECT 1716,'Schwarzsee','Schwarzsee'
+--UNION SELECT 1724,'Bonnefontaine','Bonnefontaine'
+--UNION SELECT 1727,'Corpataux','Corpataux'
+--UNION SELECT 1728,'Rossens FR','Rossens FR'
+--UNION SELECT 1731,'Ependes FR','Ependes FR'
+--UNION SELECT 1732,'Arconciel','Arconciel'
+--UNION SELECT 1733,'Treyvaux','Treyvaux'
+--UNION SELECT 1712,'Tafers','Tafers'
+--UNION SELECT 1713,'St. Antoni','St. Antoni'
+--UNION SELECT 1714,'Heitenried','Heitenried'
+--UNION SELECT 1715,'Alterswil FR','Alterswil FR'
+--UNION SELECT 1716,'Plaffeien','Plaffeien'
+--UNION SELECT 1717,'St. Ursen','St. Ursen'
+--UNION SELECT 1718,'Rechthalten','Rechthalten'
+--UNION SELECT 1722,'Bourguillon','Bourguillon'
+--UNION SELECT 1723,'Marly','Marly'
+--UNION SELECT 1724,'Le Mouret','Le Mouret'
+--UNION SELECT 1725,'Posieux','Posieux'
+--UNION SELECT 1726,'Farvagny-le-Grand','Farvagny-le-Grand'
+--UNION SELECT 1747,'Corserey','Corserey'
+--UNION SELECT 1748,'Torny-le-Grand','Torny-le-Grand'
+--UNION SELECT 1749,'Middes','Middes'
+--UNION SELECT 1740,'Neyruz FR','Neyruz FR'
+--UNION SELECT 1741,'Cottens FR','Cottens FR'
+--UNION SELECT 1745,'Lentigny','Lentigny'
+--UNION SELECT 1742,'Autigny','Autigny'
+--UNION SELECT 1695,'Estavayer-Gibloux','Estavayer-le-Gibloux'
+--UNION SELECT 1691,'Villarimboud','Villarimboud'
+--UNION SELECT 1753,'Matran','Matran'
+--UNION SELECT 1756,'Onnens FR','Onnens FR'
+--UNION SELECT 1690,'Villaz-St-Pierre','Villaz-St-Pierre'
+--UNION SELECT 1762,'Givisiez','Givisiez'
+--UNION SELECT 1772,'Grolley','Grolley'
+--UNION SELECT 1774,'Cousset','Cousset'
+--UNION SELECT 1776,'Montagny-la-Ville','Montagny-la-Ville'
+--UNION SELECT 1795,'Courlevon','Courlevon'
+--UNION SELECT 1796,'Courgevaux','Courgevaux'
+--UNION SELECT 1794,'Salvenach','Salvenach'
+--UNION SELECT 1793,'Jeuss','Jeuss'
+--UNION SELECT 1792,'Cordast','Cordast'
+--UNION SELECT 1791,'Courtaman','Courtaman'
+--UNION SELECT 1788,'Praz Vully','Praz Vully'
+--UNION SELECT 1789,'Lugnorre','Lugnorre'
+--UNION SELECT 1782,'Belfaux','Belfaux'
+--UNION SELECT 1783,'Pensier','Pensier'
+--UNION SELECT 1784,'Courtepin','Courtepin'
+--UNION SELECT 1785,'Cressier FR','Cressier FR'
+--UNION SELECT 1786,'Sugiez','Sugiez'
+--UNION SELECT 1800,'Vevey','Vevey'
+--UNION SELECT 1800,'Vevey 1','Vevey 1'
+--UNION SELECT 1800,'Vevey 1 Dist','Vevey 1 Distribution'
+--UNION SELECT 1808,'Monts-de-Corsier','Les Monts-de-Corsier'
+--UNION SELECT 1809,'Fenil-sur-Corsier','Fenil-sur-Corsier'
+--UNION SELECT 1802,'Corseaux','Corseaux'
+--UNION SELECT 1803,'Chardonne','Chardonne'
+--UNION SELECT 1804,'Corsier-sur-Vevey','Corsier-sur-Vevey'
+--UNION SELECT 1805,'Jongny','Jongny'
+--UNION SELECT 1807,'Blonay','Blonay'
+--UNION SELECT 1071,'Rivaz','Rivaz'
+--UNION SELECT 1071,'St-Saphorin-Lavaux','St-Saphorin Lavaux'
+--UNION SELECT 1814,'La Tour-de-Peilz','La Tour-de-Peilz'
+--UNION SELECT 1815,'Clarens','Clarens'
+--UNION SELECT 1816,'Chailly-Montreux','Chailly-Montreux'
+--UNION SELECT 1817,'Brent','Brent'
+--UNION SELECT 1820,'Montreux','Montreux'
+--UNION SELECT 1820,'Montreux 1','Montreux 1'
+--UNION SELECT 1820,'Montreux 2','Montreux 2'
+--UNION SELECT 1820,'Montreux 1 Dist','Montreux 1 Distribution'
+--UNION SELECT 1822,'Chernex','Chernex'
+--UNION SELECT 1823,'Glion','Glion'
+--UNION SELECT 1824,'Caux','Caux'
+--UNION SELECT 1832,'Villard-sur-Chamby','Villard-sur-Chamby'
+--UNION SELECT 1669,'Sciernes-d''Albeuve','Les Sciernes-d''Albeuve'
+--UNION SELECT 1658,'La Tine','La Tine'
+--UNION SELECT 1660,'Les Moulins','Les Moulins'
+--UNION SELECT 1659,'Flendruz','Flendruz'
+--UNION SELECT 1660,'L''Etivaz','L''Etivaz'
+--UNION SELECT 1832,'Chamby','Chamby'
+--UNION SELECT 1833,'Les Avants','Les Avants'
+--UNION SELECT 1669,'Montbovon','Montbovon'
+--UNION SELECT 1659,'Rougemont','Rougemont'
+--UNION SELECT 1844,'Villeneuve VD','Villeneuve VD'
+--UNION SELECT 1847,'Rennaz','Rennaz'
+--UNION SELECT 1845,'Noville','Noville'
+--UNION SELECT 1846,'Chessel','Chessel'
+--UNION SELECT 1852,'Roche VD','Roche VD'
+--UNION SELECT 1853,'Yvorne','Yvorne'
+--UNION SELECT 1854,'Leysin','Leysin'
+--UNION SELECT 1867,'St-Triphon','St-Triphon'
+--UNION SELECT 1860,'Aigle','Aigle'
+--UNION SELECT 1856,'Corbeyrier','Corbeyrier'
+--UNION SELECT 1862,'La Comballaz','La Comballaz'
+--UNION SELECT 1862,'Les Mosses','Les Mosses'
+--UNION SELECT 1866,'La Forclaz VD','La Forclaz VD'
+--UNION SELECT 1867,'Panex','Panex'
+--UNION SELECT 1864,'Vers-l''Eglise','Vers-l''Eglise'
+--UNION SELECT 1865,'Les Diablerets','Les Diablerets'
+--UNION SELECT 1867,'Ollon VD','Ollon VD'
+--UNION SELECT 1868,'Collombey','Collombey'
+--UNION SELECT 1870,'Monthey','Monthey'
+--UNION SELECT 1870,'Monthey 2','Monthey 2'
+--UNION SELECT 1871,'Les Giettes','Les Giettes'
+--UNION SELECT 1872,'Troistorrents','Troistorrents'
+--UNION SELECT 1873,'Val-d''Illiez','Val-d''Illiez'
+--UNION SELECT 1875,'Morgins','Morgins'
+--UNION SELECT 1880,'Bex','Bex'
+--UNION SELECT 1880,'Fenalet-sur-Bex','Fenalet-sur-Bex'
+--UNION SELECT 1880,'Les Plans-sur-Bex','Les Plans-sur-Bex'
+--UNION SELECT 1882,'Gryon','Gryon'
+--UNION SELECT 1884,'Villars-sur-Ollon','Villars-sur-Ollon'
+--UNION SELECT 1890,'St-Maurice','St-Maurice'
+--UNION SELECT 1890,'Mex VS','Mex VS'
+--UNION SELECT 1869,'Massongex','Massongex'
+--UNION SELECT 1895,'Vionnaz','Vionnaz'
+--UNION SELECT 1897,'Les Evouettes','Les Evouettes'
+--UNION SELECT 1899,'Torgon','Torgon'
+--UNION SELECT 1892,'Lavey-Village','Lavey-Village'
+--UNION SELECT 1893,'Muraz Collombey','Muraz Collombey'
+--UNION SELECT 1896,'Vouvry','Vouvry'
+--UNION SELECT 1896,'Miex','Miex'
+--UNION SELECT 1897,'Bouveret','Bouveret'
+--UNION SELECT 1898,'St-Gingolph','St-Gingolph'
+--UNION SELECT 1902,'Evionnaz','Evionnaz'
+--UNION SELECT 1903,'Collonges','Collonges'
+--UNION SELECT 1904,'Vernayaz','Vernayaz'
+--UNION SELECT 1906,'Charrat','Charrat'
+--UNION SELECT 1907,'Saxon','Saxon'
+--UNION SELECT 1908,'Riddes','Riddes'
+--UNION SELECT 1912,'Leytron','Leytron'
+--UNION SELECT 1911,'Ovronnaz','Ovronnaz'
+--UNION SELECT 1913,'Saillon','Saillon'
+--UNION SELECT 1918,'La Tzoumaz','La Tzoumaz'
+--UNION SELECT 1955,'Chamoson','Chamoson'
+--UNION SELECT 1955,'St-Pierre-Clages','St-Pierre-de-Clages'
+--UNION SELECT 1957,'Ardon','Ardon'
+--UNION SELECT 1920,'Martigny','Martigny'
+--UNION SELECT 1920,'Martigny 1','Martigny 1'
+--UNION SELECT 1920,'Martigny Bourg','Martigny Bourg'
+--UNION SELECT 1921,'Martigny-Croix','Martigny-Croix'
+--UNION SELECT 1927,'Chemin','Chemin'
+--UNION SELECT 1929,'Trient','Trient'
+--UNION SELECT 1928,'Ravoire','Ravoire'
+--UNION SELECT 1922,'Salvan','Salvan'
+--UNION SELECT 1922,'Granges Salvan','Les Granges Salvan'
+--UNION SELECT 1925,'Finhaut','Finhaut'
+--UNION SELECT 1926,'Fully','Fully'
+--UNION SELECT 1932,'Bovernier','Bovernier'
+--UNION SELECT 1942,'Levron','Levron'
+--UNION SELECT 1948,'Lourtier','Lourtier'
+--UNION SELECT 1948,'Fionnay','Fionnay'
+--UNION SELECT 1948,'Sarreyer','Sarreyer'
+--UNION SELECT 1945,'Liddes','Liddes'
+--UNION SELECT 1946,'Bourg-St-Pierre','Bourg-St-Pierre'
+--UNION SELECT 1943,'Praz-de-Fort','Praz-de-Fort'
+--UNION SELECT 1944,'La Fouly VS','La Fouly VS'
+--UNION SELECT 1933,'Sembrancher','Sembrancher'
+--UNION SELECT 1936,'Verbier','Verbier'
+--UNION SELECT 1938,'Champex-Lac','Champex-Lac'
+--UNION SELECT 1950,'Sion','Sion'
+--UNION SELECT 1950,'Sion 1','Sion 1'
+--UNION SELECT 1950,'Sion 1 Dist','Sion 1 Distribution'
+--UNION SELECT 1950,'Sion','Sion'
+--UNION SELECT 1950,'Sion 2','Sion 2'
+--UNION SELECT 1976,'Erde','Erde'
+--UNION SELECT 1976,'Aven','Aven'
+--UNION SELECT 1976,'Daillon','Daillon'
+--UNION SELECT 1971,'Grimisuat','Grimisuat'
+--UNION SELECT 1974,'Arbaz','Arbaz'
+--UNION SELECT 1973,'Nax','Nax'
+--UNION SELECT 1968,'Mase','Mase'
+--UNION SELECT 1969,'St-Martin VS','St-Martin VS'
+--UNION SELECT 1981,'Vex','Vex'
+--UNION SELECT 1982,'Euseigne','Euseigne'
+--UNION SELECT 1986,'Arolla','Arolla'
+--UNION SELECT 1985,'La Sage','La Sage'
+--UNION SELECT 1988,'Les Collons','Les Collons'
+--UNION SELECT 1991,'Salins','Salins'
+--UNION SELECT 1992,'Les Agettes','Les Agettes'
+--UNION SELECT 1992,'Les Mayens-de-Sion','Les Mayens-de-Sion'
+--UNION SELECT 1993,'Veysonnaz','Veysonnaz'
+--UNION SELECT 1997,'Siviez Nendaz','Siviez Nendaz'
+--UNION SELECT 1996,'Fey Nendaz','Fey Nendaz'
+--UNION SELECT 1996,'Beuson Nendaz','Beuson Nendaz'
+--UNION SELECT 1996,'Baar Nendaz','Baar Nendaz'
+--UNION SELECT 1996,'Basse-Nendaz','Basse-Nendaz'
+--UNION SELECT 1997,'Haute-Nendaz','Haute-Nendaz'
+--UNION SELECT 1994,'Aproz Nendaz','Aproz Nendaz'
+--UNION SELECT 1962,'Pont-de-la-Morge','Pont-de-la-Morge Sion'
+--UNION SELECT 1964,'Conthey','Conthey'
+--UNION SELECT 1966,'Ayent','Ayent'
+--UNION SELECT 1967,'Bramois','Bramois'
+--UNION SELECT 1988,'Thyon','Thyon'
+--UNION SELECT 2012,'Auvernier','Auvernier'
+--UNION SELECT 2013,'Colombier NE','Colombier NE'
+--UNION SELECT 2015,'Areuse','Areuse'
+--UNION SELECT 2016,'Cortaillod','Cortaillod'
+--UNION SELECT 2017,'Boudry','Boudry'
+--UNION SELECT 2022,'Bevaix','Bevaix'
+--UNION SELECT 2023,'Gorgier','Gorgier'
+--UNION SELECT 2024,'St-Aubin-Sauges','St-Aubin-Sauges'
+--UNION SELECT 2025,'Chez-le-Bart','Chez-le-Bart'
+--UNION SELECT 2028,'Vaumarcus','Vaumarcus'
+--UNION SELECT 2034,'Peseux','Peseux'
+--UNION SELECT 2035,'Corcelles NE','Corcelles NE'
+--UNION SELECT 2042,'Valangin','Valangin'
+--UNION SELECT 2043,'Boudevilliers','Boudevilliers'
+--UNION SELECT 2046,'Fontaines NE','Fontaines NE'
+--UNION SELECT 2052,'Fontainemelon','Fontainemelon'
+--UNION SELECT 2053,'Cernier','Cernier'
+--UNION SELECT 2056,'Dombresson','Dombresson'
+--UNION SELECT 2057,'Villiers','Villiers'
+--UNION SELECT 2063,'Vilars NE','Vilars NE'
+--UNION SELECT 2065,'Savagnier','Savagnier'
+--UNION SELECT 2067,'Chaumont','Chaumont'
+--UNION SELECT 2068,'Hauterive NE','Hauterive NE'
+--UNION SELECT 2072,'St-Blaise','St-Blaise'
+--UNION SELECT 2073,'Enges','Enges'
+--UNION SELECT 2074,'Marin-Epagnier','Marin-Epagnier'
+--UNION SELECT 3238,'Gals','Gals'
+--UNION SELECT 2087,'Cornaux NE','Cornaux NE'
+--UNION SELECT 2088,'Cressier NE','Cressier NE'
+--UNION SELECT 2318,'Brot-Plamboz','Brot-Plamboz'
+--UNION SELECT 2103,'Noiraigue','Noiraigue'
+--UNION SELECT 2105,'Travers','Travers'
+--UNION SELECT 2108,'Couvet','Couvet'
+--UNION SELECT 2113,'Boveresse','Boveresse'
+--UNION SELECT 2114,'Fleurier','Fleurier'
+--UNION SELECT 2115,'Buttes','Buttes'
+--UNION SELECT 2123,'St-Sulpice NE','St-Sulpice NE'
+--UNION SELECT 2406,'Le Brouillet','Le Brouillet'
+--UNION SELECT 2127,'Les Bayards','Les Bayards'
+--UNION SELECT 2149,'Champ-du-Moulin','Champ-du-Moulin'
+--UNION SELECT 2124,'Les Sagnettes','Les Sagnettes'
+--UNION SELECT 2116,'Mont-de-Buttes','Mont-de-Buttes'
+--UNION SELECT 1454,'La Vraconnaz','La Vraconnaz'
+--UNION SELECT 2019,'Chambrelien','Chambrelien'
+--UNION SELECT 2019,'Rochefort','Rochefort'
+--UNION SELECT 2037,'Montmollin','Montmollin'
+--UNION SELECT 2206,'Geneveys-Coffrane','Les Geneveys-sur-Coffrane'
+--UNION SELECT 2207,'Coffrane','Coffrane'
+--UNION SELECT 2208,'Les Hauts-Geneveys','Les Hauts-Geneveys'
+--UNION SELECT 2300,'La Chaux-de-Fonds','La Chaux-de-Fonds'
+--UNION SELECT 2300,'La Chaux-de-Fds 1','La Chaux-de-Fonds 1'
+--UNION SELECT 2300,'La Chaux-de-Fonds','La Chaux-de-Fonds'
+--UNION SELECT 2300,'La Chaux-de-Fonds','La Chaux-de-Fonds'
+--UNION SELECT 2300,'Chdfds 1 Dist','La Chaux-de-Fonds 1 Dist'
+--UNION SELECT 2300,'La Chaux-de-Fonds','La Chaux-de-Fonds'
+--UNION SELECT 2300,'La Chx-de-F. Eplat','La Chx-de-F. Les Eplatures'
+--UNION SELECT 2316,'Petit-Martel','Petit-Martel'
+--UNION SELECT 2338,'Les Emibois','Les Emibois'
+--UNION SELECT 2314,'La Sagne NE','La Sagne NE'
+--UNION SELECT 2316,'Ponts-de-Martel','Les Ponts-de-Martel'
+--UNION SELECT 2325,'Les Planchettes','Les Planchettes'
+--UNION SELECT 2300,'La Cibourg','La Cibourg'
+--UNION SELECT 2336,'Les Bois','Les Bois'
+--UNION SELECT 2400,'Le Locle','Le Locle'
+--UNION SELECT 2405,'La Chaux-du-Milieu','La Chaux-du-Milieu'
+--UNION SELECT 2416,'Les Brenets','Les Brenets'
+--UNION SELECT 2500,'Biel/Bienne','Biel/Bienne'
+--UNION SELECT 2500,'Biel/Bienne 1','Biel/Bienne 1'
+--UNION SELECT 2500,'Biel/Bienne 3','Biel/Bienne 3'
+--UNION SELECT 2500,'Biel/Bienne J.P.','Biel/Bienne Jardin Paradis'
+--UNION SELECT 2500,'Biel/Bienne 6','Biel/Bienne 6'
+--UNION SELECT 2500,'Biel/Bienne 7','Biel/Bienne 7'
+--UNION SELECT 2500,'Biel/Bienne 8','Biel/Bienne 8'
+--UNION SELECT 2500,'Biel/Bienne Zust','Biel/Bienne Zustellung'
+--UNION SELECT 2500,'Biel 1 Annahme','Biel/Bienne 1 Annahme'
+--UNION SELECT 2500,'Biel/Bienne','Biel/Bienne'
+--UNION SELECT 2500,'Biel/Bienne','Biel/Bienne'
+--UNION SELECT 2500,'Biel/Bienne','Biel/Bienne'
+--UNION SELECT 2500,'Biel/Bienne','Biel/Bienne'
+--UNION SELECT 2500,'Biel/Bienne','Biel/Bienne'
+--UNION SELECT 2513,'Twann','Twann'
+--UNION SELECT 2514,'Ligerz','Ligerz'
+--UNION SELECT 2516,'Lamboing','Lamboing'
+--UNION SELECT 2517,'Diesse','Diesse'
+--UNION SELECT 2518,'Nods','Nods'
+--UNION SELECT 2520,'La Neuveville','La Neuveville'
+--UNION SELECT 2525,'Le Landeron','Le Landeron'
+--UNION SELECT 2532,'Magglingen/Macolin','Magglingen/Macolin'
+--UNION SELECT 2533,'Evilard','Evilard'
+--UNION SELECT 2534,'Orvin','Orvin'
+--UNION SELECT 2535,'Frinvillier','Frinvillier'
+--UNION SELECT 2536,'Plagne','Plagne'
+--UNION SELECT 2537,'Vauffelin','Vauffelin'
+--UNION SELECT 2538,'Romont BE','Romont BE'
+--UNION SELECT 2540,'Grenchen','Grenchen'
+--UNION SELECT 2540,'Grenchen 1','Grenchen 1'
+--UNION SELECT 2540,'Grenchen Schmelzi','Grenchen Schmelzi'
+--UNION SELECT 2542,'Pieterlen','Pieterlen'
+--UNION SELECT 2543,'Lengnau BE','Lengnau BE'
+--UNION SELECT 2544,'Bettlach','Bettlach'
+--UNION SELECT 2545,'Selzach','Selzach'
+--UNION SELECT 2552,'Orpund','Orpund'
+--UNION SELECT 2553,'Safnern','Safnern'
+--UNION SELECT 2554,'Meinisberg','Meinisberg'
+--UNION SELECT 2556,'Scheuren','Scheuren'
+--UNION SELECT 2557,'Studen BE','Studen BE'
+--UNION SELECT 2558,'Aegerten','Aegerten'
+--UNION SELECT 2560,'Nidau','Nidau'
+--UNION SELECT 2562,'Port','Port'
+--UNION SELECT 2563,'Ipsach','Ipsach'
+--UNION SELECT 2564,'Bellmund','Bellmund'
+--UNION SELECT 2565,'Jens','Jens'
+--UNION SELECT 2572,'Sutz','Sutz'
+--UNION SELECT 2577,'Siselen BE','Siselen BE'
+--UNION SELECT 2604,'La Heutte','La Heutte'
+--UNION SELECT 2605,'Sonceboz-Sombeval','Sonceboz-Sombeval'
+--UNION SELECT 2608,'Courtelary','Courtelary'
+--UNION SELECT 2608,'Mtgne-Courtelary','Montagne-de-Courtelary'
+--UNION SELECT 2610,'St-Imier','St-Imier'
+--UNION SELECT 2610,'Mont-Soleil','Mont-Soleil'
+--UNION SELECT 2610,'Mont-Crosin','Mont-Crosin'
+--UNION SELECT 2612,'Cormoret','Cormoret'
+--UNION SELECT 2613,'Villeret','Villeret'
+--UNION SELECT 2615,'Sonvilier','Sonvilier'
+--UNION SELECT 2615,'Montagne-Sonvilier','Montagne-de-Sonvilier'
+--UNION SELECT 2616,'Renan BE','Renan BE'
+--UNION SELECT 2710,'Tavannes','Tavannes'
+--UNION SELECT 2712,'Le Fuet','Le Fuet'
+--UNION SELECT 2717,'Fornet-Dessous','Fornet-Dessous'
+--UNION SELECT 2718,'Fornet-Dessus','Fornet-Dessus'
+--UNION SELECT 2716,'Sornetan','Sornetan'
+--UNION SELECT 2713,'Bellelay','Bellelay'
+--UNION SELECT 2714,'Les Genevez JU','Les Genevez JU'
+--UNION SELECT 2718,'Lajoux JU','Lajoux JU'
+--UNION SELECT 2720,'Tramelan','Tramelan'
+--UNION SELECT 2720,'La Tanne','La Tanne'
+--UNION SELECT 2722,'Les Reussilles','Les Reussilles'
+--UNION SELECT 2723,'Mont-Tramelan','Mont-Tramelan'
+--UNION SELECT 2345,'Les Breuleux','Les Breuleux'
+--UNION SELECT 2345,'Le Cerneux-Veusil','Le Cerneux-Veusil'
+--UNION SELECT 2345,'Chaux-des-Breuleux','La Chaux-des-Breuleux'
+--UNION SELECT 2340,'Le Noirmont','Le Noirmont'
+--UNION SELECT 2353,'Les Pommerats','Les Pommerats'
+--UNION SELECT 2354,'Goumois','Goumois'
+--UNION SELECT 2732,'Reconvilier','Reconvilier'
+--UNION SELECT 2732,'Saicourt','Saicourt'
+--UNION SELECT 2732,'Saules BE','Saules BE'
+--UNION SELECT 2732,'Loveresse','Loveresse'
+--UNION SELECT 2733,'Pontenet','Pontenet'
+--UNION SELECT 2736,'Sorvilier','Sorvilier'
+--UNION SELECT 2738,'Court','Court'
+--UNION SELECT 2740,'Moutier','Moutier'
+--UNION SELECT 2742,'Perrefitte','Perrefitte'
+--UNION SELECT 2748,'Souboz','Souboz'
+--UNION SELECT 2743,'Eschert','Eschert'
+--UNION SELECT 2744,'Belprahon','Belprahon'
+--UNION SELECT 2747,'Seehof','Seehof'
+--UNION SELECT 2745,'Grandval','Grandval'
+--UNION SELECT 2747,'Corcelles BE','Corcelles BE'
+--UNION SELECT 2762,'Roches BE','Roches BE'
+--UNION SELECT 2832,'Rebeuvelier','Rebeuvelier'
+--UNION SELECT 2830,'Courrendlin','Courrendlin'
+--UNION SELECT 2802,'Develier','Develier'
+--UNION SELECT 2803,'Bourrignon','Bourrignon'
+--UNION SELECT 2806,'Mettembert','Mettembert'
+--UNION SELECT 2807,'Pleigne','Pleigne'
+--UNION SELECT 2807,'Lucelle','Lucelle'
+--UNION SELECT 2812,'Movelier','Movelier'
+--UNION SELECT 2813,'Ederswiler','Ederswiler'
+--UNION SELECT 2814,'Roggenburg','Roggenburg'
+--UNION SELECT 2822,'Courroux','Courroux'
+--UNION SELECT 2823,'Courcelon','Courcelon'
+--UNION SELECT 2824,'Vicques','Vicques'
+--UNION SELECT 2825,'Courchapoix','Courchapoix'
+--UNION SELECT 2826,'Corban','Corban'
+--UNION SELECT 2827,'Mervelier','Mervelier'
+--UNION SELECT 2828,'Montsevelier','Montsevelier'
+--UNION SELECT 2829,'Vermes','Vermes'
+--UNION SELECT 2842,'Rossemaison','Rossemaison'
+--UNION SELECT 2853,'Courfaivre','Courfaivre'
+--UNION SELECT 2854,'Bassecourt','Bassecourt'
+--UNION SELECT 2855,'Glovelier','Glovelier'
+--UNION SELECT 2857,'Montavon','Montavon'
+--UNION SELECT 2863,'Undervelier','Undervelier'
+--UNION SELECT 2864,'Soulce','Soulce'
+--UNION SELECT 2873,'Saulcy','Saulcy'
+--UNION SELECT 2882,'St-Ursanne','St-Ursanne'
+--UNION SELECT 2883,'Montmelon','Montmelon'
+--UNION SELECT 2884,'Montenol','Montenol'
+--UNION SELECT 2885,'Epauvillers','Epauvillers'
+--UNION SELECT 2886,'Epiquerez','Epiquerez'
+--UNION SELECT 2887,'Soubey','Soubey'
+--UNION SELECT 2888,'Seleute','Seleute'
+--UNION SELECT 2889,'Ocourt','Ocourt'
+--UNION SELECT 2950,'Courgenay','Courgenay'
+--UNION SELECT 2900,'Porrentruy','Porrentruy'
+--UNION SELECT 2900,'Porrentruy 1','Porrentruy 1'
+--UNION SELECT 2900,'Porrentruy 2','Porrentruy 2'
+--UNION SELECT 2900,'Porrentruy 1 Dist','Porrentruy 1 Distribution'
+--UNION SELECT 2902,'Fontenais','Fontenais'
+--UNION SELECT 2903,'Villars-Fontenais','Villars-sur-Fontenais'
+--UNION SELECT 2904,'Bressaucourt','Bressaucourt'
+--UNION SELECT 2905,'Courtedoux','Courtedoux'
+--UNION SELECT 2906,'Chevenez','Chevenez'
+--UNION SELECT 2907,'Rocourt','Rocourt'
+--UNION SELECT 2908,'Grandfontaine','Grandfontaine'
+--UNION SELECT 2912,'Roche-d''Or','Roche-d''ORr'
+--UNION SELECT 2914,'Damvant','Damvant'
+--UNION SELECT 2915,'Bure','Bure'
+--UNION SELECT 2916,'Fahy','Fahy'
+--UNION SELECT 2922,'Courchavon','Courchavon'
+--UNION SELECT 2924,'Montignez','Montignez'
+--UNION SELECT 2925,'Buix','Buix'
+--UNION SELECT 2926,'Boncourt','Boncourt'
+--UNION SELECT 2932,'Coeuve','Coeuve'
+--UNION SELECT 2942,'Alle','Alle'
+--UNION SELECT 2943,'Vendlincourt','Vendlincourt'
+--UNION SELECT 2944,'Bonfol','Bonfol'
+--UNION SELECT 2947,'Charmoille','Charmoille'
+--UNION SELECT 2952,'Cornol','Cornol'
+--UNION SELECT 2954,'Asuel','Asuel'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern Europaplatz','Bern Europaplatz'
+--UNION SELECT 3000,'Bern 6','Bern 6'
+--UNION SELECT 3000,'Bern 8','Bern 8'
+--UNION SELECT 3000,'Bern 9','Bern 9'
+--UNION SELECT 3000,'Bern 13','Bern 13'
+--UNION SELECT 3000,'Bern 14','Bern 14'
+--UNION SELECT 3000,'Bern 15','Bern 15'
+--UNION SELECT 3000,'Bern 16','Bern 16'
+--UNION SELECT 3000,'Bern 22','Bern 22'
+--UNION SELECT 3000,'Bern Sulgenbach','Bern Sulgenbach'
+--UNION SELECT 3000,'Bern Spitalacker','Bern Spitalacker'
+--UNION SELECT 3000,'Bern Freudenberger','Bern Freudenbergerplatz'
+--UNION SELECT 3000,'Bern Postauto','Bern Postauto BE-FB-SO'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern PostFinance','Bern PostFinance'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 3095,'Spiegel b. Bern','Spiegel b. Bern'
+--UNION SELECT 3032,'Hinterkappelen','Hinterkappelen'
+--UNION SELECT 3033,'Wohlen b. Bern','Wohlen b. Bern'
+--UNION SELECT 3034,'Murzelen','Murzelen'
+--UNION SELECT 3035,'Frieswil','Frieswil'
+--UNION SELECT 3036,'Detligen','Detligen'
+--UNION SELECT 3037,'Herrenschwanden','Herrenschwanden'
+--UNION SELECT 3038,'Kirchlindach','Kirchlindach'
+--UNION SELECT 3042,'Ortschwaben','Ortschwaben'
+--UNION SELECT 3043,'Uettligen','Uettligen'
+--UNION SELECT 3045,'Meikirch','Meikirch'
+--UNION SELECT 3046,'Wahlendorf','Wahlendorf'
+--UNION SELECT 3047,'Bremgarten b. Bern','Bremgarten b. Bern'
+--UNION SELECT 3048,'Worblaufen','Worblaufen'
+--UNION SELECT 3052,'Zollikofen','Zollikofen'
+--UNION SELECT 3063,'Ittigen','Ittigen'
+--UNION SELECT 3065,'Bolligen','Bolligen'
+--UNION SELECT 3065,'Bolligen Dorf','Bolligen Dorf'
+--UNION SELECT 3066,'Stettlen','Stettlen'
+--UNION SELECT 3067,'Boll','Boll'
+--UNION SELECT 3068,'Utzigen','Utzigen'
+--UNION SELECT 3072,'Ostermundigen','Ostermundigen'
+--UNION SELECT 3072,'Ostermundigen 1','Ostermundigen 1'
+--UNION SELECT 3074,'Muri b. Bern','Muri b. Bern'
+--UNION SELECT 3076,'Worb','Worb'
+--UNION SELECT 3076,'Worb Bollstrasse','Worb Bollstrasse'
+--UNION SELECT 3077,'Enggistein','Enggistein'
+--UNION SELECT 3078,'Richigen','Richigen'
+--UNION SELECT 3082,'Schlosswil','Schlosswil'
+--UNION SELECT 3083,'Trimstein','Trimstein'
+--UNION SELECT 3084,'Wabern','Wabern'
+--UNION SELECT 3086,'Zimmerwald','Zimmerwald'
+--UNION SELECT 3087,'Niedermuhlern','Niedermuhlern'
+--UNION SELECT 3089,'Hinterfultigen','Hinterfultigen'
+--UNION SELECT 3096,'Oberbalm','Oberbalm'
+--UNION SELECT 3097,'Liebefeld','Liebefeld'
+--UNION SELECT 3112,'Allmendingen b. BE','Allmendingen b. Bern'
+--UNION SELECT 3114,'Wichtrach','Wichtrach'
+--UNION SELECT 3115,'Gerzensee','Gerzensee'
+--UNION SELECT 3116,'Kirchdorf BE','Kirchdorf BE'
+--UNION SELECT 3629,'Kiesen','Kiesen'
+--UNION SELECT 3628,'Uttigen','Uttigen'
+--UNION SELECT 3122,'Kehrsatz','Kehrsatz'
+--UNION SELECT 3123,'Belp','Belp'
+--UNION SELECT 3124,'Belpberg','Belpberg'
+--UNION SELECT 3125,'Toffen','Toffen'
+--UNION SELECT 3126,'Kaufdorf','Kaufdorf'
+--UNION SELECT 3128,'Kirchenthurnen','Kirchenthurnen'
+--UNION SELECT 3132,'Riggisberg','Riggisberg'
+--UNION SELECT 3664,'Burgistein','Burgistein'
+--UNION SELECT 3665,'Wattenwil','Wattenwil'
+--UNION SELECT 3662,'Seftigen','Seftigen'
+--UNION SELECT 3663,'Gurzelen','Gurzelen'
+--UNION SELECT 3661,'Uetendorf','Uetendorf'
+--UNION SELECT 3144,'Gasel','Gasel'
+--UNION SELECT 3145,'Niederscherli','Niederscherli'
+--UNION SELECT 3150,'Schwarzenburg','Schwarzenburg'
+--UNION SELECT 3152,'Mamishaus','Mamishaus'
+--UNION SELECT 3155,'Helgisried','Helgisried-Rohrbach'
+--UNION SELECT 3156,'Riffenmatt','Riffenmatt'
+--UNION SELECT 3157,'Milken','Milken'
+--UNION SELECT 3158,'Guggisberg','Guggisberg'
+--UNION SELECT 3172,'Niederwangen BE','Niederwangen b. Bern'
+--UNION SELECT 3173,'Oberwangen b. Bern','Oberwangen b. Bern'
+--UNION SELECT 3175,'Flamatt','Flamatt'
+--UNION SELECT 3176,'Neuenegg','Neuenegg'
+--UNION SELECT 3177,'Laupen BE','Laupen BE'
+--UNION SELECT 3179,'Kriechenwil','Kriechenwil'
+--UNION SELECT 3182,'Ueberstorf','Ueberstorf'
+--UNION SELECT 3183,'Albligen','Albligen'
+--UNION SELECT 3126,'Gelterfingen','Gelterfingen'
+--UNION SELECT 3202,'Frauenkappelen','Frauenkappelen'
+--UNION SELECT 3206,'Rizenbach','Rizenbach'
+--UNION SELECT 3207,'Wileroltigen','Wileroltigen'
+--UNION SELECT 3210,'Kerzers','Kerzers'
+--UNION SELECT 3216,'Ried b. Kerzers','Ried b. Kerzers'
+--UNION SELECT 3215,'Gempenach','Gempenach'
+--UNION SELECT 3214,'Ulmiz','Ulmiz'
+--UNION SELECT 3213,'Liebistorf','Liebistorf'
+--UNION SELECT 3212,'Gurmels','Gurmels'
+--UNION SELECT 3226,'Treiten','Treiten'
+--UNION SELECT 3232,'Ins','Ins'
+--UNION SELECT 3233,'Tschugg','Tschugg'
+--UNION SELECT 3234,'Vinelz','Vinelz'
+--UNION SELECT 3235,'Erlach','Erlach'
+--UNION SELECT 3236,'Gampelen','Gampelen'
+--UNION SELECT 3250,'Lyss','Lyss'
+--UNION SELECT 3250,'Lyss Zustellung','Lyss Zustellung'
+--UNION SELECT 3252,'Worben','Worben'
+--UNION SELECT 3253,'Schnottwil','Schnottwil'
+--UNION SELECT 3254,'Messen','Messen'
+--UNION SELECT 3255,'Rapperswil BE','Rapperswil BE'
+--UNION SELECT 3256,'Dieterswil','Dieterswil'
+--UNION SELECT 3257,'Grossaffoltern','Grossaffoltern'
+--UNION SELECT 3257,'Ammerzwil BE','Ammerzwil BE'
+--UNION SELECT 3262,'Suberg','Suberg'
+--UNION SELECT 3266,'Wiler b. Seedorf','Wiler b. Seedorf'
+--UNION SELECT 3267,'Seedorf BE','Seedorf BE'
+--UNION SELECT 3268,'Lobsigen','Lobsigen'
+--UNION SELECT 3270,'Aarberg','Aarberg'
+--UNION SELECT 3271,'Radelfingen','Radelfingen b. Aarberg'
+--UNION SELECT 3272,'Walperswil','Walperswil'
+--UNION SELECT 3273,'Kappelen','Kappelen'
+--UNION SELECT 3274,'Hermrigen','Hermrigen'
+--UNION SELECT 3280,'Murten','Murten'
+--UNION SELECT 3280,'Meyriez','Meyriez'
+--UNION SELECT 3282,'Bargen BE','Bargen BE'
+--UNION SELECT 3283,'Kallnach','Kallnach'
+--UNION SELECT 3285,'Galmiz','Galmiz'
+--UNION SELECT 3286,'Muntelier','Muntelier'
+--UNION SELECT 3292,'Busswil BE','Busswil BE'
+--UNION SELECT 3293,'Dotzigen','Dotzigen'
+--UNION SELECT 3296,'Arch','Arch'
+--UNION SELECT 3297,'Leuzigen','Leuzigen'
+--UNION SELECT 3302,'Moosseedorf','Moosseedorf'
+--UNION SELECT 3303,'Jegenstorf','Jegenstorf'
+--UNION SELECT 3308,'Grafenried','Grafenried'
+--UNION SELECT 3312,'Fraubrunnen','Fraubrunnen'
+--UNION SELECT 3314,'Schalunen','Schalunen'
+--UNION SELECT 3322,'Mattstetten','Mattstetten'
+--UNION SELECT 3324,'Hindelbank','Hindelbank'
+--UNION SELECT 3325,'Hettiswil','Hettiswil b. Hindelbank'
+--UNION SELECT 3326,'Krauchthal','Krauchthal'
+--UNION SELECT 3303,'Zuzwil BE','Zuzwil BE'
+--UNION SELECT 3305,'Iffwil','Iffwil'
+--UNION SELECT 3306,'Etzelkofen','Etzelkofen'
+--UNION SELECT 3307,'Brunnenthal','Brunnenthal'
+--UNION SELECT 3309,'Kernenried','Kernenried'
+--UNION SELECT 3317,'Limpach','Limpach'
+--UNION SELECT 3360,'Herzogenbuchsee','Herzogenbuchsee'
+--UNION SELECT 4556,'Aeschi SO','Aeschi SO'
+--UNION SELECT 3376,'Graben','Graben'
+--UNION SELECT 3372,'Wanzwil','Wanzwil'
+--UNION SELECT 3373,'Heimenhausen','Heimenhausen'
+--UNION SELECT 3374,'Wangenried','Wangenried'
+--UNION SELECT 3365,'Seeberg','Seeberg'
+--UNION SELECT 3365,'Grasswil','Grasswil'
+--UNION SELECT 3366,'Bettenhausen','Bettenhausen'
+--UNION SELECT 3368,'Bleienbach','Bleienbach'
+--UNION SELECT 3400,'Burgdorf','Burgdorf'
+--UNION SELECT 3400,'Burgdorf 1','Burgdorf 1'
+--UNION SELECT 3400,'Burgdorf Zust','Burgdorf Zustellung'
+--UNION SELECT 3400,'Burgdorf','Burgdorf'
+--UNION SELECT 3400,'Burgdorf','Burgdorf'
+--UNION SELECT 3412,'Heimiswil','Heimiswil'
+--UNION SELECT 3413,'Kaltacker','Kaltacker'
+--UNION SELECT 3414,'Oberburg','Oberburg'
+--UNION SELECT 3416,'Affoltern BE','Affoltern im Emmental'
+--UNION SELECT 3419,'Biembach','Biembach im Emmental'
+--UNION SELECT 3421,'Lyssach','Lyssach'
+--UNION SELECT 3422,'Kirchberg BE','Kirchberg BE'
+--UNION SELECT 3423,'Ersigen','Ersigen'
+--UNION SELECT 3425,'Koppigen','Koppigen'
+--UNION SELECT 3426,'Aefligen','Aefligen'
+--UNION SELECT 3427,'Utzenstorf','Utzenstorf'
+--UNION SELECT 3428,'Wiler b.Utzenstorf','Wiler b. Utzenstorf'
+--UNION SELECT 3433,'Schwanden i. E.','Schwanden im Emmental'
+--UNION SELECT 3434,'Obergoldbach','Obergoldbach'
+--UNION SELECT 3435,'Ramsei','Ramsei'
+--UNION SELECT 3438,'Lauperswil','Lauperswil'
+--UNION SELECT 3453,'Heimisbach','Heimisbach'
+--UNION SELECT 3454,'Sumiswald','Sumiswald'
+--UNION SELECT 3456,'Trachselwald','Trachselwald'
+--UNION SELECT 3457,'Wasen im Emmental','Wasen im Emmental'
+--UNION SELECT 3462,'Weier im Emmental','Weier im Emmental'
+--UNION SELECT 3472,'Wynigen','Wynigen'
+--UNION SELECT 3473,'Alchenstorf','Alchenstorf'
+--UNION SELECT 3475,'Riedtwil','Riedtwil'
+--UNION SELECT 3475,'Hermiswil','Hermiswil'
+--UNION SELECT 3476,'Oschwand','Oschwand'
+--UNION SELECT 3503,'Gysenstein','Gysenstein'
+--UNION SELECT 3507,'Biglen','Biglen'
+--UNION SELECT 3508,'Arni BE','Arni BE'
+--UNION SELECT 3510,'Konolfingen','Konolfingen'
+--UNION SELECT 3512,'Walkringen','Walkringen'
+--UNION SELECT 3513,'Bigenthal','Bigenthal'
+--UNION SELECT 3415,'Schafhausen i. E.','Schafhausen im Emmental'
+--UNION SELECT 3672,'Oberdiessbach','Oberdiessbach'
+--UNION SELECT 3672,'Aeschlen','Aeschlen b. Oberdiessbach'
+--UNION SELECT 3673,'Linden','Linden'
+--UNION SELECT 3674,'Bleiken','Bleiken b. Oberdiessbach'
+--UNION SELECT 3671,'Brenzikofen','Brenzikofen'
+--UNION SELECT 3531,'Oberthal','Oberthal'
+--UNION SELECT 3533,'Bowil','Bowil'
+--UNION SELECT 3534,'Signau','Signau'
+--UNION SELECT 3536,'Aeschau','Aeschau'
+--UNION SELECT 3537,'Eggiwil','Eggiwil'
+--UNION SELECT 3543,'Emmenmatt','Emmenmatt'
+--UNION SELECT 3550,'Langnau i. E.','Langnau im Emmental'
+--UNION SELECT 3551,'Oberfrittenbach','Oberfrittenbach'
+--UNION SELECT 3553,'Gohl','Gohl'
+--UNION SELECT 3555,'Trubschachen','Trubschachen'
+--UNION SELECT 3556,'Trub','Trub'
+--UNION SELECT 3557,'Fankhaus Trub','Fankhaus Trub'
+--UNION SELECT 3600,'Thun','Thun'
+--UNION SELECT 3600,'Thun 2 Zustellung','Thun 2 Zustellung'
+--UNION SELECT 3600,'Thun Aarezentrum','Thun Aarezentrum'
+--UNION SELECT 3600,'Thun','Thun'
+--UNION SELECT 3600,'Thun','Thun'
+--UNION SELECT 3600,'Thun','Thun'
+--UNION SELECT 3600,'Thun','Thun'
+--UNION SELECT 3600,'Thun','Thun'
+--UNION SELECT 3617,'Fahrni b. Thun','Fahrni b. Thun'
+--UNION SELECT 3619,'Eriz','Eriz'
+--UNION SELECT 3622,'Homberg b. Thun','Homberg b. Thun'
+--UNION SELECT 3635,'Uebeschi','Uebeschi'
+--UNION SELECT 3612,'Steffisburg','Steffisburg'
+--UNION SELECT 3613,'Steffisburg','Steffisburg'
+--UNION SELECT 3614,'Unterlangenegg','Unterlangenegg'
+--UNION SELECT 3615,'Heimenschwand','Heimenschwand'
+--UNION SELECT 3616,'Schwarzenegg','Schwarzenegg'
+--UNION SELECT 3623,'Teuffenthal BE','Teuffenthal b. Thun'
+--UNION SELECT 3624,'Goldiwil Thun','Goldiwil Thun'
+--UNION SELECT 3625,'Heiligenschwendi','Heiligenschwendi'
+--UNION SELECT 3627,'Heimberg','Heimberg'
+--UNION SELECT 3633,'Amsoldingen','Amsoldingen'
+--UNION SELECT 3634,'Thierachern','Thierachern'
+--UNION SELECT 3638,'Blumenstein','Blumenstein'
+--UNION SELECT 3638,'Pohlern','Pohlern'
+--UNION SELECT 3645,'Gwatt Thun','Gwatt Thun'
+--UNION SELECT 3646,'Einigen','Einigen'
+--UNION SELECT 3647,'Reutigen','Reutigen'
+--UNION SELECT 3652,'Hilterfingen','Hilterfingen'
+--UNION SELECT 3653,'Oberhofen Thun''see','Oberhofen am Thunersee'
+--UNION SELECT 3654,'Gunten','Gunten'
+--UNION SELECT 3655,'Sigriswil','Sigriswil'
+--UNION SELECT 3656,'Tschingel','Tschingel ob Gunten'
+--UNION SELECT 3656,'Aeschlen ob Gunten','Aeschlen ob Gunten'
+--UNION SELECT 3657,'Schwanden Sigrisw','Schwanden Sigriswil'
+--UNION SELECT 3658,'Merligen','Merligen'
+--UNION SELECT 3700,'Spiez','Spiez'
+--UNION SELECT 3702,'Hondrich','Hondrich'
+--UNION SELECT 3703,'Aeschi b. Spiez','Aeschi b. Spiez'
+--UNION SELECT 3703,'Aeschiried','Aeschiried'
+--UNION SELECT 3704,'Krattigen','Krattigen'
+--UNION SELECT 3705,'Faulensee','Faulensee'
+--UNION SELECT 3706,'Leissigen','Leissigen'
+--UNION SELECT 3711,'Emdthal','Emdthal'
+--UNION SELECT 3713,'Reichenbach i. K.','Reichenbach im Kandertal'
+--UNION SELECT 3714,'Frutigen','Frutigen'
+--UNION SELECT 3714,'Wengi b. Frutigen','Wengi b. Frutigen'
+--UNION SELECT 3715,'Adelboden','Adelboden'
+--UNION SELECT 3716,'Kandergrund','Kandergrund'
+--UNION SELECT 3717,'Blausee-Mitholz','Blausee-Mitholz'
+--UNION SELECT 3718,'Kandersteg','Kandersteg'
+--UNION SELECT 3722,'Scharnachtal','Scharnachtal'
+--UNION SELECT 3723,'Kiental','Kiental'
+--UNION SELECT 3724,'Ried Frutigen','Ried Frutigen'
+--UNION SELECT 3725,'Achseten','Achseten'
+--UNION SELECT 3752,'Wimmis','Wimmis'
+--UNION SELECT 3753,'Oey','Oey'
+--UNION SELECT 3754,'Diemtigen','Diemtigen'
+--UNION SELECT 3755,'Horboden','Horboden'
+--UNION SELECT 3757,'Schwenden','Schwenden im Diemtigtal'
+--UNION SELECT 3758,'Latterbach','Latterbach'
+--UNION SELECT 3762,'Erlenbach i. S.','Erlenbach im Simmental'
+--UNION SELECT 3764,'Weissenburg','Weissenburg'
+--UNION SELECT 3765,'Oberwil i. S.','Oberwil im Simmental'
+--UNION SELECT 3766,'Boltigen','Boltigen'
+--UNION SELECT 3770,'Zweisimmen','Zweisimmen'
+--UNION SELECT 3771,'Blankenburg','Blankenburg'
+--UNION SELECT 3772,'St. Stephan','St. Stephan'
+--UNION SELECT 3773,'MattenSt.Stephan','Matten St. Stephan'
+--UNION SELECT 3775,'Lenk im Simmental','Lenk im Simmental'
+--UNION SELECT 3776,'Oeschseite','Oeschseite'
+--UNION SELECT 3780,'Gstaad','Gstaad'
+--UNION SELECT 3781,'Turbach','Turbach'
+--UNION SELECT 3782,'Lauenen b. Gstaad','Lauenen b. Gstaad'
+--UNION SELECT 3783,'Grund b. Gstaad','Grund b. Gstaad'
+--UNION SELECT 3784,'Feutersoey','Feutersoey'
+--UNION SELECT 3785,'Gsteig b. Gstaad','Gsteig b. Gstaad'
+--UNION SELECT 3792,'Saanen','Saanen'
+--UNION SELECT 3800,'Interlaken','Interlaken'
+--UNION SELECT 3800,'Unterseen','Unterseen'
+--UNION SELECT 3800,'Matten b. Interl','Matten b. Interlaken'
+--UNION SELECT 3801,'Jungfraujoch','Jungfraujoch'
+--UNION SELECT 3803,'Beatenberg','Beatenberg'
+--UNION SELECT 3804,'Habkern','Habkern'
+--UNION SELECT 3805,'Goldswil','Goldswil b. Interlaken'
+--UNION SELECT 3807,'Iseltwald','Iseltwald'
+--UNION SELECT 3812,'Wilderswil','Wilderswil'
+--UNION SELECT 3813,'Saxeten','Saxeten'
+--UNION SELECT 3814,'Gsteigwiler','Gsteigwiler'
+--UNION SELECT 3816,'Burglauenen','Burglauenen'
+--UNION SELECT 3818,'Grindelwald','Grindelwald'
+--UNION SELECT 3822,'Lauterbrunnen','Lauterbrunnen'
+--UNION SELECT 3822,'Isenfluh','Isenfluh'
+--UNION SELECT 3823,'Wengen','Wengen'
+--UNION SELECT 3824,'Stechelberg','Stechelberg'
+--UNION SELECT 3826,'Gimmelwald','Gimmelwald'
+--UNION SELECT 3852,'Ringgenberg BE','Ringgenberg BE'
+--UNION SELECT 3853,'Niederried Interl','Niederried b. Interlaken'
+--UNION SELECT 3854,'Oberried Brienz','Oberried am Brienzersee'
+--UNION SELECT 3855,'Brienz BE','Brienz BE'
+--UNION SELECT 3855,'Axalp','Axalp'
+--UNION SELECT 3856,'Brienzwiler','Brienzwiler'
+--UNION SELECT 3857,'Unterbach BE','Unterbach BE'
+--UNION SELECT 3858,'Hofstetten BE','Hofstetten b. Brienz'
+--UNION SELECT 3860,'Meiringen','Meiringen'
+--UNION SELECT 3860,'Rosenlaui','Rosenlaui'
+--UNION SELECT 3862,'Innertkirchen','Innertkirchen'
+--UNION SELECT 3863,'Gadmen','Gadmen'
+--UNION SELECT 3864,'Guttannen','Guttannen'
+--UNION SELECT 3900,'Brig','Brig'
+--UNION SELECT 3900,'Gamsen','Gamsen'
+--UNION SELECT 3949,'Hohtenn','Hohtenn'
+--UNION SELECT 3903,'Birgisch','Birgisch'
+--UNION SELECT 3903,'Mund','Mund'
+--UNION SELECT 3914,'Blatten b. Naters','Blatten b. Naters'
+--UNION SELECT 3914,'Belalp','Belalp'
+--UNION SELECT 3913,'Rosswald','Rosswald'
+--UNION SELECT 3911,'Ried-Brig','Ried-Brig'
+--UNION SELECT 3912,'Termen','Termen'
+--UNION SELECT 3901,'Rothwald','Rothwald'
+--UNION SELECT 3907,'Simplon Hospiz','Simplon Hospiz'
+--UNION SELECT 3907,'Simplon Dorf','Simplon Dorf'
+--UNION SELECT 3907,'Gabi Simplon','Gabi Simplon'
+--UNION SELECT 3907,'Gondo','Gondo'
+--UNION SELECT 3922,'Eisten','Eisten'
+--UNION SELECT 3908,'Saas-Balen','Saas-Balen'
+--UNION SELECT 3910,'Saas-Grund','Saas-Grund'
+--UNION SELECT 3902,'Glis','Glis'
+--UNION SELECT 3917,'Goppenstein','Goppenstein'
+--UNION SELECT 3916,'Ferden','Ferden'
+--UNION SELECT 3917,'Kippel','Kippel'
+--UNION SELECT 3904,'Naters','Naters'
+--UNION SELECT 3905,'Saas-Almagell','Saas-Almagell'
+--UNION SELECT 3906,'Saas-Fee','Saas-Fee'
+--UNION SELECT 3920,'Zermatt','Zermatt'
+--UNION SELECT 3926,'Embd','Embd'
+--UNION SELECT 3927,'Herbriggen','Herbriggen'
+--UNION SELECT 3928,'Randa','Randa'
+--UNION SELECT 3922,'Stalden VS','Stalden VS'
+--UNION SELECT 3922,'Kalpetran','Kalpetran'
+--UNION SELECT 3924,'St. Niklaus VS','St. Niklaus VS'
+--UNION SELECT 3930,'Visp','Visp'
+--UNION SELECT 3942,'St. German','St. German'
+--UNION SELECT 3933,'Staldenried','Staldenried'
+--UNION SELECT 3937,'Baltschieder','Baltschieder'
+--UNION SELECT 3938,'Ausserberg','Ausserberg'
+--UNION SELECT 3939,'Eggerberg','Eggerberg'
+--UNION SELECT 3930,'Eyholz','Eyholz'
+--UNION SELECT 3931,'Lalden','Lalden'
+--UNION SELECT 3932,'Visperterminen','Visperterminen'
+--UNION SELECT 3934,'Zeneggen','Zeneggen'
+--UNION SELECT 3943,'Eischoll','Eischoll'
+--UNION SELECT 3947,'Ergisch','Ergisch'
+--UNION SELECT 3948,'Unterems','Unterems'
+--UNION SELECT 3946,'Gruben','Gruben'
+--UNION SELECT 3948,'Oberems','Oberems'
+--UNION SELECT 3951,'Agarn','Agarn'
+--UNION SELECT 3955,'Albinen','Albinen'
+--UNION SELECT 3956,'Guttet-Feschel','Guttet-Feschel'
+--UNION SELECT 3957,'Erschmatt','Erschmatt'
+--UNION SELECT 3953,'Varen','Varen'
+--UNION SELECT 3978,'Flanthey','Flanthey'
+--UNION SELECT 1978,'Lens','Lens'
+--UNION SELECT 1977,'Icogne','Icogne'
+--UNION SELECT 3942,'Raron','Raron'
+--UNION SELECT 3942,'Niedergesteln','Niedergesteln'
+--UNION SELECT 3945,'Gampel','Gampel'
+--UNION SELECT 3946,'Turtmann','Turtmann'
+--UNION SELECT 3952,'Susten','Susten'
+--UNION SELECT 3953,'Leuk Stadt','Leuk Stadt'
+--UNION SELECT 3953,'Inden','Inden'
+--UNION SELECT 3954,'Leukerbad','Leukerbad'
+--UNION SELECT 3970,'Salgesch','Salgesch'
+--UNION SELECT 3977,'Granges VS','Granges VS'
+--UNION SELECT 3960,'Sierre','Sierre'
+--UNION SELECT 3960,'Loc','Loc'
+--UNION SELECT 3971,'Chermignon','Chermignon'
+--UNION SELECT 3971,'Chermignon-Bas','Chermignon-d''en-Bas'
+--UNION SELECT 3971,'Ollon VS','Ollon VS'
+--UNION SELECT 3974,'Mollens VS','Mollens VS'
+--UNION SELECT 3975,'Randogne','Randogne'
+--UNION SELECT 3961,'Vissoie','Vissoie'
+--UNION SELECT 3961,'St-Luc','St-Luc'
+--UNION SELECT 3961,'Chandolin','Chandolin'
+--UNION SELECT 3961,'Ayer','Ayer'
+--UNION SELECT 3961,'Zinal','Zinal'
+--UNION SELECT 3961,'Grimentz','Grimentz'
+--UNION SELECT 3967,'Vercorin','Vercorin'
+--UNION SELECT 3963,'Montana','Montana'
+--UNION SELECT 3963,'Crans-Montana','Crans-Montana'
+--UNION SELECT 3960,'Muraz Sierre','Muraz Sierre'
+--UNION SELECT 3965,'Chippis','Chippis'
+--UNION SELECT 3966,'Chalais','Chalais'
+--UNION SELECT 3968,'Veyras','Veyras'
+--UNION SELECT 3982,'Bitsch','Bitsch'
+--UNION SELECT 3993,'Grengiols','Grengiols'
+--UNION SELECT 3994,'Lax','Lax'
+--UNION SELECT 3997,'Bellwald','Bellwald'
+--UNION SELECT 3989,'Niederwald','Niederwald'
+--UNION SELECT 3989,'Blitzingen','Blitzingen'
+--UNION SELECT 3989,'Biel VS','Biel VS'
+--UNION SELECT 3998,'Gluringen','Gluringen'
+--UNION SELECT 3998,'Reckingen VS','Reckingen VS'
+--UNION SELECT 3985,'Geschinen','Geschinen'
+--UNION SELECT 3988,'Obergesteln','Obergesteln'
+--UNION SELECT 3999,'Oberwald','Oberwald'
+--UNION SELECT 3987,'Riederalp','Riederalp'
+--UNION SELECT 3991,'Betten','Betten'
+--UNION SELECT 3992,'Bettmeralp','Bettmeralp'
+--UNION SELECT 3995,'Ernen','Ernen'
+--UNION SELECT 3996,'Binn','Binn'
+--UNION SELECT 3984,'Fiesch','Fiesch'
+--UNION SELECT 3988,'Ulrichen','Ulrichen'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel 2 Zust','Basel 2 Zustellung'
+--UNION SELECT 4000,'Basel Dist Ba','Basel Dist Ba'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4002,'Basel 2 Annahme','Basel 2 Annahme'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4021,'Basel Sort','Basel Sortierung'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4101,'Bruderholz','Bruderholz'
+--UNION SELECT 4102,'Binningen','Binningen'
+--UNION SELECT 4102,'Binningen 1','Binningen 1'
+--UNION SELECT 4102,'Binningen Gorenm.','Binningen Gorenmatt'
+--UNION SELECT 4103,'Bottmingen','Bottmingen'
+--UNION SELECT 4104,'Oberwil BL','Oberwil BL'
+--UNION SELECT 4105,'Biel-Benken BL','Biel-Benken BL'
+--UNION SELECT 4106,'Therwil','Therwil'
+--UNION SELECT 4107,'Ettingen','Ettingen'
+--UNION SELECT 4108,'Witterswil','Witterswil'
+--UNION SELECT 4114,'Hofstetten SO','Hofstetten SO'
+--UNION SELECT 4115,'Mariastein','Mariastein'
+--UNION SELECT 4116,'Metzerlen','Metzerlen'
+--UNION SELECT 4117,'Burg im Leimental','Burg im Leimental'
+--UNION SELECT 4118,'Rodersdorf','Rodersdorf'
+--UNION SELECT 4123,'Allschwil','Allschwil'
+--UNION SELECT 4123,'Allschwil 1','Allschwil 1'
+--UNION SELECT 4123,'Allschwil Dorf','Allschwil Dorf'
+--UNION SELECT 4123,'Allschwil Lindenpl','Allschwil Lindenplatz'
+--UNION SELECT 4125,'Riehen','Riehen'
+--UNION SELECT 4125,'Riehen 1','Riehen 1'
+--UNION SELECT 4125,'Riehen Rauracher','Riehen Rauracher'
+--UNION SELECT 4126,'Bettingen','Bettingen'
+--UNION SELECT 4127,'Birsfelden','Birsfelden'
+--UNION SELECT 4132,'Muttenz','Muttenz'
+--UNION SELECT 4132,'Muttenz 1','Muttenz 1'
+--UNION SELECT 4132,'Muttenz Lutzert','Muttenz Lutzert'
+--UNION SELECT 4133,'Pratteln','Pratteln'
+--UNION SELECT 4133,'Pratteln 1','Pratteln 1'
+--UNION SELECT 4140,'Pratteln CIRCLE','Pratteln CIRCLE'
+--UNION SELECT 4143,'Dornach','Dornach'
+--UNION SELECT 4144,'Arlesheim','Arlesheim'
+--UNION SELECT 4145,'Gempen','Gempen'
+--UNION SELECT 4146,'Hochwald','Hochwald'
+--UNION SELECT 4147,'Aesch BL','Aesch BL'
+--UNION SELECT 4148,'Pfeffingen','Pfeffingen'
+--UNION SELECT 4153,'Reinach BL','Reinach BL'
+--UNION SELECT 4153,'Reinach BL 1','Reinach BL 1'
+--UNION SELECT 4153,'Reinach BL Surbaum','Reinach BL Surbaum'
+--UNION SELECT 4202,'Duggingen','Duggingen'
+--UNION SELECT 4203,'Grellingen','Grellingen'
+--UNION SELECT 4206,'Seewen SO','Seewen SO'
+--UNION SELECT 4207,'Bretzwil','Bretzwil'
+--UNION SELECT 4208,'Nunningen','Nunningen'
+--UNION SELECT 4222,'Zwingen','Zwingen'
+--UNION SELECT 4225,'Brislach','Brislach'
+--UNION SELECT 4226,'Breitenbach','Breitenbach'
+--UNION SELECT 4228,'Erschwil','Erschwil'
+--UNION SELECT 4242,'Laufen','Laufen'
+--UNION SELECT 4243,'Dittingen','Dittingen'
+--UNION SELECT 4204,'Himmelried','Himmelried'
+--UNION SELECT 4223,'Blauen','Blauen'
+--UNION SELECT 4224,'Nenzlingen','Nenzlingen'
+--UNION SELECT 4229,'Beinwil SO','Beinwil SO'
+--UNION SELECT 4232,'Fehren','Fehren'
+--UNION SELECT 4233,'Meltingen','Meltingen'
+--UNION SELECT 4234,'Zullwil','Zullwil'
+--UNION SELECT 4246,'Wahlen b. Laufen','Wahlen b. Laufen'
+--UNION SELECT 4247,'Grindel','Grindel'
+--UNION SELECT 4253,'Liesberg','Liesberg'
+--UNION SELECT 4254,'Liesberg Dorf','Liesberg Dorf'
+--UNION SELECT 4302,'Augst BL','Augst BL'
+--UNION SELECT 4303,'Kaiseraugst','Kaiseraugst'
+--UNION SELECT 4304,'Giebenach','Giebenach'
+--UNION SELECT 4305,'Olsberg','Olsberg'
+--UNION SELECT 4310,'Rheinfelden','Rheinfelden'
+--UNION SELECT 4310,'Rheinfelden 1','Rheinfelden 1'
+--UNION SELECT 4310,'Rheinfelden 2','Rheinfelden 2'
+--UNION SELECT 4312,'Magden','Magden'
+--UNION SELECT 4314,'Zeiningen','Zeiningen'
+--UNION SELECT 4315,'Zuzgen','Zuzgen'
+--UNION SELECT 4316,'Hellikon','Hellikon'
+--UNION SELECT 4317,'Wegenstetten','Wegenstetten'
+--UNION SELECT 4322,'Mumpf','Mumpf'
+--UNION SELECT 4323,'Wallbach','Wallbach'
+--UNION SELECT 4324,'Obermumpf','Obermumpf'
+--UNION SELECT 4325,'Schupfart','Schupfart'
+--UNION SELECT 4332,'Stein AG','Stein AG'
+--UNION SELECT 4334,'Sisseln AG','Sisseln AG'
+--UNION SELECT 5080,'Laufenburg','Laufenburg'
+--UNION SELECT 5082,'Kaisten','Kaisten'
+--UNION SELECT 5083,'Ittenthal','Ittenthal'
+--UNION SELECT 5084,'Rheinsulz','Rheinsulz'
+--UNION SELECT 5085,'Sulz AG','Sulz AG'
+--UNION SELECT 5275,'Etzgen','Etzgen'
+--UNION SELECT 5274,'Mettau','Mettau'
+--UNION SELECT 5273,'Oberhofen AG','Oberhofen AG'
+--UNION SELECT 5272,'Gansingen','Gansingen'
+--UNION SELECT 5276,'Wil AG','Wil AG'
+--UNION SELECT 5277,'Hottwil','Hottwil'
+--UNION SELECT 5326,'Schwaderloch','Schwaderloch'
+--UNION SELECT 5325,'Leibstadt','Leibstadt'
+--UNION SELECT 5324,'Full-Reuenthal','Full-Reuenthal'
+--UNION SELECT 4402,'Frenkendorf','Frenkendorf'
+--UNION SELECT 4410,'Liestal','Liestal'
+--UNION SELECT 4410,'Liestal Kaserne','Liestal Kaserne'
+--UNION SELECT 4411,'Seltisberg','Seltisberg'
+--UNION SELECT 4412,'Nuglar','Nuglar'
+--UNION SELECT 4415,'Lausen','Lausen'
+--UNION SELECT 4416,'Bubendorf','Bubendorf'
+--UNION SELECT 4417,'Ziefen','Ziefen'
+--UNION SELECT 4418,'Reigoldswil','Reigoldswil'
+--UNION SELECT 4419,'Lupsingen','Lupsingen'
+--UNION SELECT 4421,'St. Pantaleon','St. Pantaleon'
+--UNION SELECT 4422,'Arisdorf','Arisdorf'
+--UNION SELECT 4423,'Hersberg','Hersberg'
+--UNION SELECT 4424,'Arboldswil','Arboldswil'
+--UNION SELECT 4425,'Titterten','Titterten'
+--UNION SELECT 4426,'Lauwil','Lauwil'
+--UNION SELECT 4431,'Bennwil','Bennwil'
+--UNION SELECT 4432,'Lampenberg','Lampenberg'
+--UNION SELECT 4433,'Ramlinsburg','Ramlinsburg'
+--UNION SELECT 4435,'Niederdorf','Niederdorf'
+--UNION SELECT 4436,'Oberdorf BL','Oberdorf BL'
+--UNION SELECT 4437,'Waldenburg','Waldenburg'
+--UNION SELECT 4438,'Langenbruck','Langenbruck'
+--UNION SELECT 4442,'Diepflingen','Diepflingen'
+--UNION SELECT 4443,'Wittinsburg','Wittinsburg'
+--UNION SELECT 4446,'Buckten','Buckten'
+--UNION SELECT 4450,'Sissach','Sissach'
+--UNION SELECT 4451,'Wintersingen','Wintersingen'
+--UNION SELECT 4452,'Itingen','Itingen'
+--UNION SELECT 4453,'Nusshof','Nusshof'
+--UNION SELECT 4455,'Zunzgen','Zunzgen'
+--UNION SELECT 4456,'Tenniken','Tenniken'
+--UNION SELECT 4457,'Diegten','Diegten'
+--UNION SELECT 4458,'Eptingen','Eptingen'
+--UNION SELECT 4460,'Gelterkinden','Gelterkinden'
+--UNION SELECT 4465,'Hemmiken','Hemmiken'
+--UNION SELECT 4469,'Anwil','Anwil'
+--UNION SELECT 4462,'Rickenbach BL','Rickenbach BL'
+--UNION SELECT 4463,'Buus','Buus'
+--UNION SELECT 4464,'Maisprach','Maisprach'
+--UNION SELECT 4466,'Ormalingen','Ormalingen'
+--UNION SELECT 4467,'Rothenfluh','Rothenfluh'
+--UNION SELECT 4468,'Kienberg','Kienberg'
+--UNION SELECT 4492,'Tecknau','Tecknau'
+--UNION SELECT 4493,'Wenslingen','Wenslingen'
+--UNION SELECT 4494,'Oltingen','Oltingen'
+--UNION SELECT 4495,'Zeglingen','Zeglingen'
+--UNION SELECT 4496,'Kilchberg BL','Kilchberg BL'
+--UNION SELECT 4500,'Solothurn','Solothurn'
+--UNION SELECT 4500,'Solothurn 1','Solothurn 1'
+--UNION SELECT 4500,'Solothurn 1 Zust','Solothurn 1 Zustellung'
+--UNION SELECT 4501,'Solothurn Bahnhof','Solothurn Bahnhof'
+--UNION SELECT 4500,'Solothurn','Solothurn'
+--UNION SELECT 4500,'Solothurn','Solothurn'
+--UNION SELECT 4515,'Weissenstein','Weissenstein b. Solothurn'
+--UNION SELECT 4523,'Niederwil SO','Niederwil SO'
+--UNION SELECT 4535,'Hubersdorf','Hubersdorf'
+--UNION SELECT 4539,'Rumisberg','Rumisberg'
+--UNION SELECT 4539,'Farnern','Farnern'
+--UNION SELECT 4557,'Horriwil','Horriwil'
+--UNION SELECT 4558,'Hersiwil','Hersiwil'
+--UNION SELECT 4512,'Bellach','Bellach'
+--UNION SELECT 4513,'Langendorf','Langendorf'
+--UNION SELECT 4514,'Lommiswil','Lommiswil'
+--UNION SELECT 4515,'Oberdorf SO','Oberdorf SO'
+--UNION SELECT 4528,'Zuchwil','Zuchwil'
+--UNION SELECT 4532,'Feldbrunnen','Feldbrunnen'
+--UNION SELECT 4533,'Riedholz','Riedholz'
+--UNION SELECT 4534,'Flumenthal','Flumenthal'
+--UNION SELECT 4536,'Attiswil','Attiswil'
+--UNION SELECT 4537,'Wiedlisbach','Wiedlisbach'
+--UNION SELECT 4538,'Oberbipp','Oberbipp'
+--UNION SELECT 4552,'Derendingen','Derendingen'
+--UNION SELECT 4553,'Subingen','Subingen'
+--UNION SELECT 4554,'Etziken','Etziken'
+--UNION SELECT 3375,'Inkwil','Inkwil'
+--UNION SELECT 4562,'Biberist','Biberist'
+--UNION SELECT 4563,'Gerlafingen','Gerlafingen'
+--UNION SELECT 4564,'Obergerlafingen','Obergerlafingen'
+--UNION SELECT 4564,'Zielebach','Zielebach'
+--UNION SELECT 4565,'Recherswil','Recherswil'
+--UNION SELECT 4566,'Kriegstetten','Kriegstetten'
+--UNION SELECT 4586,'Kyburg-Buchegg','Kyburg-Buchegg'
+--UNION SELECT 4579,'Gossliwil','Gossliwil'
+--UNION SELECT 4578,'Bibern SO','Bibern SO'
+--UNION SELECT 4571,'Ichertswil','Ichertswil'
+--UNION SELECT 4576,'Tscheppach','Tscheppach'
+--UNION SELECT 4577,'Hessigkofen','Hessigkofen'
+--UNION SELECT 4585,'Biezwil','Biezwil'
+--UNION SELECT 4587,'Aetingen','Aetingen'
+--UNION SELECT 4588,'Unterramsern','Unterramsern'
+--UNION SELECT 4588,'Oberramsern','Oberramsern'
+--UNION SELECT 4574,'Nennigkofen','Nennigkofen'
+--UNION SELECT 4600,'Olten','Olten'
+--UNION SELECT 4600,'Olten 1','Olten 1'
+--UNION SELECT 4600,'Olten 2 Zustellung','Olten 2 Zustellung'
+--UNION SELECT 4612,'Wangen b. Olten','Wangen b. Olten'
+--UNION SELECT 4613,'Rickenbach SO','Rickenbach SO'
+--UNION SELECT 4616,'Kappel SO','Kappel SO'
+--UNION SELECT 4617,'Gunzgen','Gunzgen'
+--UNION SELECT 4618,'Boningen','Boningen'
+--UNION SELECT 4622,'Egerkingen','Egerkingen'
+--UNION SELECT 4623,'Neuendorf','Neuendorf'
+--UNION SELECT 4625,'Oberbuchsiten','Oberbuchsiten'
+--UNION SELECT 4626,'Niederbuchsiten','Niederbuchsiten'
+--UNION SELECT 4632,'Trimbach','Trimbach'
+--UNION SELECT 4652,'Winznau','Winznau'
+--UNION SELECT 4654,'Lostorf','Lostorf'
+--UNION SELECT 4655,'Rohr b. Olten','Rohr b. Olten'
+--UNION SELECT 4656,'Starrkirch-Wil','Starrkirch-Wil'
+--UNION SELECT 4657,'Dulliken','Dulliken'
+--UNION SELECT 4663,'Aarburg','Aarburg'
+--UNION SELECT 4665,'Oftringen','Oftringen'
+--UNION SELECT 4665,'Oftringen 1','Oftringen 1'
+--UNION SELECT 4665,'Oftringen 2','Oftringen 2'
+--UNION SELECT 4615,'Allerheiligenberg','Allerheiligenberg'
+--UNION SELECT 4633,'Hauenstein','Hauenstein'
+--UNION SELECT 4634,'Wisen SO','Wisen SO'
+--UNION SELECT 4702,'Oensingen','Oensingen'
+--UNION SELECT 4703,'Kestenholz','Kestenholz'
+--UNION SELECT 4704,'Niederbipp','Niederbipp'
+--UNION SELECT 3380,'Wangen an der Aare','Wangen an der Aare'
+--UNION SELECT 3377,'Walliswil b.Wangen','Walliswil b. Wangen'
+--UNION SELECT 4543,'Deitingen','Deitingen'
+--UNION SELECT 4542,'Luterbach','Luterbach'
+--UNION SELECT 4710,'Balsthal','Balsthal'
+--UNION SELECT 4714,'Aedermannsdorf','Aedermannsdorf'
+--UNION SELECT 4715,'Herbetswil','Herbetswil'
+--UNION SELECT 4719,'Ramiswil','Ramiswil'
+--UNION SELECT 4712,'Laupersdorf','Laupersdorf'
+--UNION SELECT 4713,'Matzendorf','Matzendorf'
+--UNION SELECT 4716,'Welschenrohr','Welschenrohr'
+--UNION SELECT 4718,'Holderbank SO','Holderbank SO'
+--UNION SELECT 4800,'Zofingen','Zofingen'
+--UNION SELECT 4801,'Zofingen','Zofingen Ringier AG'
+--UNION SELECT 4802,'Strengelbach','Strengelbach'
+--UNION SELECT 4803,'Vordemwald','Vordemwald'
+--UNION SELECT 4805,'Brittnau','Brittnau'
+--UNION SELECT 4806,'Wikon','Wikon'
+--UNION SELECT 4813,'Uerkheim','Uerkheim'
+--UNION SELECT 4814,'Bottenwil','Bottenwil'
+--UNION SELECT 4852,'Rothrist','Rothrist'
+--UNION SELECT 4853,'Murgenthal','Murgenthal'
+--UNION SELECT 4629,'Fulenbach','Fulenbach'
+--UNION SELECT 4628,'Wolfwil','Wolfwil'
+--UNION SELECT 4853,'Riken AG','Riken AG'
+--UNION SELECT 4900,'Langenthal','Langenthal'
+--UNION SELECT 4900,'Langenthal 1','Langenthal 1'
+--UNION SELECT 4900,'Langenthal','Langenthal'
+--UNION SELECT 4912,'Aarwangen','Aarwangen'
+--UNION SELECT 4913,'Bannwil','Bannwil'
+--UNION SELECT 4914,'Roggwil BE','Roggwil BE'
+--UNION SELECT 4915,'St. Urban','St. Urban'
+--UNION SELECT 4916,'Untersteckholz','Untersteckholz'
+--UNION SELECT 4917,'Melchnau','Melchnau'
+--UNION SELECT 4917,'Busswil b.Melchnau','Busswil b. Melchnau'
+--UNION SELECT 4955,'Gondiswil','Gondiswil'
+--UNION SELECT 4919,'Reisiswil','Reisiswil'
+--UNION SELECT 4923,'Wynau','Wynau'
+--UNION SELECT 4924,'Obersteckholz','Obersteckholz'
+--UNION SELECT 4932,'Lotzwil','Lotzwil'
+--UNION SELECT 4934,'Madiswil','Madiswil'
+--UNION SELECT 4935,'Leimiswil','Leimiswil'
+--UNION SELECT 4936,'Kleindietwil','Kleindietwil'
+--UNION SELECT 4937,'Ursenbach','Ursenbach'
+--UNION SELECT 4938,'Rohrbach','Rohrbach'
+--UNION SELECT 4942,'Walterswil BE','Walterswil BE'
+--UNION SELECT 4943,'Oeschenbach','Oeschenbach'
+--UNION SELECT 4944,'Auswil','Auswil'
+--UNION SELECT 4938,'Rohrbachgraben','Rohrbachgraben'
+--UNION SELECT 4950,'Huttwil','Huttwil'
+--UNION SELECT 4952,'Eriswil','Eriswil'
+--UNION SELECT 4953,'Schwarzenbach BE','Schwarzenbach Huttwil'
+--UNION SELECT 4954,'Wyssachen','Wyssachen'
+--UNION SELECT 5000,'Aarau','Aarau'
+--UNION SELECT 5000,'Aarau 1','Aarau 1'
+--UNION SELECT 5000,'Aarau 1 Zustellung','Aarau 1 Zustellung'
+--UNION SELECT 5000,'Aarau Postauto AG','Aarau Postauto Aargau'
+--UNION SELECT 5000,'Aarau Kaserne','Aarau Kaserne'
+--UNION SELECT 5000,'Aarau 1','Aarau 1'
+--UNION SELECT 5000,'Aarau','Aarau'
+--UNION SELECT 5014,'Gretzenbach','Gretzenbach'
+--UNION SELECT 5015,'Erlinsbach SO','Erlinsbach SO'
+--UNION SELECT 5017,'Barmelweid','Barmelweid'
+--UNION SELECT 5022,'Rombach','Rombach'
+--UNION SELECT 5023,'Biberstein','Biberstein'
+--UNION SELECT 5025,'Asp','Asp'
+--UNION SELECT 5027,'Herznach','Herznach'
+--UNION SELECT 5028,'Ueken','Ueken'
+--UNION SELECT 5000,'Aarau Rohr','Aarau Rohr'
+--UNION SELECT 5033,'Buchs AG','Buchs AG'
+--UNION SELECT 5034,'Suhr','Suhr'
+--UNION SELECT 5035,'Unterentfelden','Unterentfelden'
+--UNION SELECT 5036,'Oberentfelden','Oberentfelden'
+--UNION SELECT 5037,'Muhen','Muhen'
+--UNION SELECT 5042,'Hirschthal','Hirschthal'
+--UNION SELECT 5043,'Holziken','Holziken'
+--UNION SELECT 5044,'Schlossrued','Schlossrued'
+--UNION SELECT 5046,'Schmiedrued','Schmiedrued'
+--UNION SELECT 5046,'Walde AG','Walde AG'
+--UNION SELECT 5053,'Staffelbach','Staffelbach'
+--UNION SELECT 5054,'Kirchleerau-Moosle','Kirchleerau-Moosleerau'
+--UNION SELECT 5054,'Kirchleerau','Kirchleerau'
+--UNION SELECT 5054,'Moosleerau','Moosleerau'
+--UNION SELECT 5056,'Attelwil','Attelwil'
+--UNION SELECT 5057,'Reitnau','Reitnau'
+--UNION SELECT 5102,'Rupperswil','Rupperswil'
+--UNION SELECT 5103,'Wildegg','Wildegg'
+--UNION SELECT 5105,'Auenstein','Auenstein'
+--UNION SELECT 5106,'Veltheim AG','Veltheim AG'
+--UNION SELECT 5107,'Schinznach Dorf','Schinznach Dorf'
+--UNION SELECT 5108,'Oberflachs','Oberflachs'
+--UNION SELECT 5112,'Thalheim AG','Thalheim AG'
+--UNION SELECT 5113,'Holderbank AG','Holderbank AG'
+--UNION SELECT 5116,'Schinznach Bad','Schinznach Bad'
+--UNION SELECT 5245,'Habsburg','Habsburg'
+--UNION SELECT 5246,'Scherz','Scherz'
+--UNION SELECT 5200,'Brugg AG','Brugg AG'
+--UNION SELECT 5200,'Brugg AG 1','Brugg AG 1'
+--UNION SELECT 5210,'Windisch','Windisch'
+--UNION SELECT 5200,'Brugg AG Kaserne','Brugg AG Kaserne'
+--UNION SELECT 5200,'Brugg AG','Brugg AG'
+--UNION SELECT 5212,'Hausen AG','Hausen AG'
+--UNION SELECT 5213,'Villnachern','Villnachern'
+--UNION SELECT 5222,'Umiken','Umiken'
+--UNION SELECT 5223,'Riniken','Riniken'
+--UNION SELECT 5233,'Stilli','Stilli'
+--UNION SELECT 5234,'Villigen','Villigen'
+--UNION SELECT 5236,'Remigen','Remigen'
+--UNION SELECT 5242,'Birr-Lupfig','Birr-Lupfig'
+--UNION SELECT 5242,'Birr','Birr'
+--UNION SELECT 5242,'Lupfig','Lupfig'
+--UNION SELECT 5244,'Birrhard','Birrhard'
+--UNION SELECT 5078,'Effingen','Effingen'
+--UNION SELECT 5077,'Elfingen','Elfingen'
+--UNION SELECT 5079,'Zeihen','Zeihen'
+--UNION SELECT 5075,'Hornussen','Hornussen'
+--UNION SELECT 5070,'Frick','Frick'
+--UNION SELECT 5072,'Oeschgen','Oeschgen'
+--UNION SELECT 5073,'Gipf-Oberfrick','Gipf-Oberfrick'
+--UNION SELECT 5064,'Wittnau','Wittnau'
+--UNION SELECT 5062,'Oberhof','Oberhof'
+--UNION SELECT 5074,'Eiken','Eiken'
+--UNION SELECT 5300,'Turgi','Turgi'
+--UNION SELECT 5301,'Siggenthal Station','Siggenthal Station'
+--UNION SELECT 5304,'Endingen','Endingen'
+--UNION SELECT 5305,'Unterendingen','Unterendingen'
+--UNION SELECT 5306,'Tegerfelden','Tegerfelden'
+--UNION SELECT 5313,'Klingnau','Klingnau'
+--UNION SELECT 5316,'Leuggern','Leuggern'
+--UNION SELECT 5317,'Hettenschwil','Hettenschwil'
+--UNION SELECT 5318,'Mandach','Mandach'
+--UNION SELECT 5322,'Koblenz','Koblenz'
+--UNION SELECT 5400,'Baden','Baden'
+--UNION SELECT 5400,'Baden 1','Baden 1'
+--UNION SELECT 5400,'Ennetbaden','Ennetbaden'
+--UNION SELECT 5400,'Baden 1 PAD','Baden 1 Postautodienst'
+--UNION SELECT 5400,'Baden','Baden'
+--UNION SELECT 5400,'Baden','Baden'
+--UNION SELECT 5400,'Baden','Baden'
+--UNION SELECT 5400,'Baden','Baden'
+--UNION SELECT 5400,'Baden','Baden'
+--UNION SELECT 5412,'Gebenstorf','Gebenstorf'
+--UNION SELECT 5413,'Birmenstorf AG','Birmenstorf AG'
+--UNION SELECT 5415,'Nussbaumen AG','Nussbaumen AG'
+--UNION SELECT 5416,'Kirchdorf AG','Kirchdorf AG'
+--UNION SELECT 5417,'Untersiggenthal','Untersiggenthal'
+--UNION SELECT 5420,'Ehrendingen','Ehrendingen'
+--UNION SELECT 5423,'Freienwil','Freienwil'
+--UNION SELECT 5425,'Schneisingen','Schneisingen'
+--UNION SELECT 5426,'Lengnau AG','Lengnau AG'
+--UNION SELECT 5430,'Wettingen','Wettingen'
+--UNION SELECT 5430,'Wettingen 1','Wettingen 1'
+--UNION SELECT 5430,'Wettingen Dorf','Wettingen Dorf'
+--UNION SELECT 5430,'Wettingen 3','Wettingen 3'
+--UNION SELECT 5432,'Neuenhof','Neuenhof'
+--UNION SELECT 5442,'Fislisbach','Fislisbach'
+--UNION SELECT 5443,'Niederrohrdorf','Niederrohrdorf'
+--UNION SELECT 5445,'Eggenwil','Eggenwil'
+--UNION SELECT 5452,'Oberrohrdorf','Oberrohrdorf'
+--UNION SELECT 5453,'Remetschwil','Remetschwil'
+--UNION SELECT 5454,'Bellikon','Bellikon'
+--UNION SELECT 5502,'Hunzenschwil','Hunzenschwil'
+--UNION SELECT 5503,'Schafisheim','Schafisheim'
+--UNION SELECT 5504,'Othmarsingen','Othmarsingen'
+--UNION SELECT 5505,'Brunegg','Brunegg'
+--UNION SELECT 5507,'Mellingen','Mellingen'
+--UNION SELECT 5512,'Wohlenschwil','Wohlenschwil'
+--UNION SELECT 5524,'Nesselnbach','Nesselnbach'
+--UNION SELECT 5524,'Niederwil AG','Niederwil AG'
+--UNION SELECT 5600,'Lenzburg','Lenzburg'
+--UNION SELECT 5600,'Lenzburg 1','Lenzburg 1'
+--UNION SELECT 5600,'Lenzburg Stadt','Lenzburg Stadt'
+--UNION SELECT 5600,'Ammerswil AG','Ammerswil AG'
+--UNION SELECT 5603,'Staufen','Staufen'
+--UNION SELECT 5604,'Hendschiken','Hendschiken'
+--UNION SELECT 5605,'Dottikon','Dottikon'
+--UNION SELECT 5606,'Dintikon','Dintikon'
+--UNION SELECT 5608,'Stetten AG','Stetten AG'
+--UNION SELECT 5610,'Wohlen AG','Wohlen AG'
+--UNION SELECT 5610,'Wohlen AG 1','Wohlen AG 1'
+--UNION SELECT 5610,'Wohlen AG Jurastr','Wohlen AG Jurastrasse'
+--UNION SELECT 5611,'Anglikon','Anglikon'
+--UNION SELECT 5612,'Villmergen','Villmergen'
+--UNION SELECT 5613,'Hilfikon','Hilfikon'
+--UNION SELECT 5614,'Sarmenstorf','Sarmenstorf'
+--UNION SELECT 5615,'Fahrwangen','Fahrwangen'
+--UNION SELECT 5616,'Meisterschwanden','Meisterschwanden'
+--UNION SELECT 5617,'Tennwil','Tennwil'
+--UNION SELECT 5618,'Bettwil','Bettwil'
+--UNION SELECT 5620,'Bremgarten AG','Bremgarten AG'
+--UNION SELECT 5621,'Zufikon','Zufikon'
+--UNION SELECT 5620,'Bremgarten AG Kas','Bremgarten AG Kaserne'
+--UNION SELECT 5622,'Waltenschwil','Waltenschwil'
+--UNION SELECT 5623,'Boswil','Boswil'
+--UNION SELECT 5625,'Kallern','Kallern'
+--UNION SELECT 5626,'Hermetschwil-Staff','Hermetschwil-Staffeln'
+--UNION SELECT 5628,'Aristau','Aristau'
+--UNION SELECT 5630,'Muri AG','Muri AG'
+--UNION SELECT 5632,'Buttwil','Buttwil'
+--UNION SELECT 5634,'Merenschwand','Merenschwand'
+--UNION SELECT 5636,'Benzenschwil','Benzenschwil'
+--UNION SELECT 5637,'Beinwil Freiamt','Beinwil Freiamt'
+--UNION SELECT 5643,'Sins','Sins'
+--UNION SELECT 5644,'Auw','Auw'
+--UNION SELECT 5645,'Aettenschwil','Aettenschwil'
+--UNION SELECT 5646,'Abtwil AG','Abtwil AG'
+--UNION SELECT 5643,'Alikon','Alikon'
+--UNION SELECT 5702,'Niederlenz','Niederlenz'
+--UNION SELECT 5703,'Seon','Seon'
+--UNION SELECT 5704,'Egliswil','Egliswil'
+--UNION SELECT 5705,'Hallwil','Hallwil'
+--UNION SELECT 5706,'Boniswil','Boniswil'
+--UNION SELECT 5707,'Seengen','Seengen'
+--UNION SELECT 5708,'Birrwil','Birrwil'
+--UNION SELECT 5712,'Beinwil am See','Beinwil am See'
+--UNION SELECT 5723,'Teufenthal AG','Teufenthal AG'
+--UNION SELECT 5725,'Leutwil','Leutwil'
+--UNION SELECT 5726,'Unterkulm','Unterkulm'
+--UNION SELECT 5727,'Oberkulm','Oberkulm'
+--UNION SELECT 5728,'Gontenschwil','Gontenschwil'
+--UNION SELECT 5732,'Zetzwil','Zetzwil'
+--UNION SELECT 5733,'Leimbach AG','Leimbach AG'
+--UNION SELECT 5734,'Reinach AG','Reinach AG'
+--UNION SELECT 5735,'Pfeffikon LU','Pfeffikon LU'
+--UNION SELECT 5736,'Burg AG','Burg AG'
+--UNION SELECT 5737,'Menziken','Menziken'
+--UNION SELECT 5745,'Safenwil','Safenwil'
+--UNION SELECT 5746,'Walterswil SO','Walterswil SO'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 6000,'Luzern 1 Hauptpost','Luzern 1 Hauptpost'
+--UNION SELECT 6000,'Luzern 4','Luzern 4'
+--UNION SELECT 6000,'Luzern 6','Luzern 6'
+--UNION SELECT 6000,'Luzern 7','Luzern 7'
+--UNION SELECT 6000,'Luzern Wesemlin','Luzern Wesemlin'
+--UNION SELECT 6000,'Luzern Kreuzstutz','Luzern Kreuzstutz'
+--UNION SELECT 6000,'Luzern 15','Luzern 15'
+--UNION SELECT 6000,'Luzern 16','Luzern 16'
+--UNION SELECT 6000,'Luzern Zust','Luzern Zustellung'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 6010,'Kriens','Kriens'
+--UNION SELECT 6012,'Obernau','Obernau'
+--UNION SELECT 6013,'Eigenthal','Eigenthal'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 6017,'Ruswil','Ruswil'
+--UNION SELECT 6019,'Sigigen','Sigigen'
+--UNION SELECT 6018,'Buttisholz','Buttisholz'
+--UNION SELECT 6022,'Grosswangen','Grosswangen'
+--UNION SELECT 6023,'Rothenburg','Rothenburg'
+--UNION SELECT 6024,'Hildisrieden','Hildisrieden'
+--UNION SELECT 6025,'Neudorf','Neudorf'
+--UNION SELECT 6026,'Rain','Rain'
+--UNION SELECT 6028,'Herlisberg','Herlisberg'
+--UNION SELECT 6030,'Ebikon','Ebikon'
+--UNION SELECT 6032,'Emmen','Emmen'
+--UNION SELECT 6033,'Buchrain','Buchrain'
+--UNION SELECT 6034,'Inwil','Inwil'
+--UNION SELECT 6035,'Perlen','Perlen'
+--UNION SELECT 6036,'Dierikon','Dierikon'
+--UNION SELECT 6037,'Root','Root'
+--UNION SELECT 6038,'Gisikon','Gisikon'
+--UNION SELECT 6042,'Dietwil','Dietwil'
+--UNION SELECT 6043,'Adligenswil','Adligenswil'
+--UNION SELECT 6044,'Udligenswil','Udligenswil'
+--UNION SELECT 6045,'Meggen','Meggen'
+--UNION SELECT 6047,'Kastanienbaum','Kastanienbaum'
+--UNION SELECT 6048,'Horw','Horw'
+--UNION SELECT 6052,'Hergiswil NW','Hergiswil NW'
+--UNION SELECT 6053,'Alpnachstad','Alpnachstad'
+--UNION SELECT 6055,'Alpnach Dorf','Alpnach Dorf'
+--UNION SELECT 6060,'Sarnen','Sarnen'
+--UNION SELECT 6060,'Ramersberg','Ramersberg'
+--UNION SELECT 6068,'Melchsee-Frutt','Melchsee-Frutt'
+--UNION SELECT 6062,'Wilen Sarnen','Wilen Sarnen'
+--UNION SELECT 6063,'Stalden Sarnen','Stalden Sarnen'
+--UNION SELECT 6064,'Kerns','Kerns'
+--UNION SELECT 6066,'St. Niklausen OW','St. Niklausen OW'
+--UNION SELECT 6067,'Melchtal','Melchtal'
+--UNION SELECT 6072,'Sachseln','Sachseln'
+--UNION SELECT 6074,'Giswil','Giswil'
+--UNION SELECT 6078,'Lungern','Lungern'
+--UNION SELECT 6083,'Hasliberg Hohfluh','Hasliberg Hohfluh'
+--UNION SELECT 6084,'Hasliberg Wasserw','Hasliberg Wasserwendi'
+--UNION SELECT 6085,'Hasliberg Goldern','Hasliberg Goldern'
+--UNION SELECT 6086,'Hasliberg Reuti','Hasliberg Reuti'
+--UNION SELECT 6010,'Pilatus Kulm','Pilatus Kulm'
+--UNION SELECT 6102,'Malters','Malters'
+--UNION SELECT 6103,'Schwarzenberg LU','Schwarzenberg LU'
+--UNION SELECT 6105,'Schachen LU','Schachen LU'
+--UNION SELECT 6106,'Werthenstein','Werthenstein'
+--UNION SELECT 6110,'Wolhusen','Wolhusen'
+--UNION SELECT 6114,'Steinhuserberg','Steinhuserberg'
+--UNION SELECT 6110,'Fontannen','Fontannen b. Wolhusen'
+--UNION SELECT 6112,'Doppleschwand','Doppleschwand'
+--UNION SELECT 6113,'Romoos','Romoos'
+--UNION SELECT 6122,'Menznau','Menznau'
+--UNION SELECT 6123,'Geiss','Geiss'
+--UNION SELECT 6125,'Menzberg','Menzberg'
+--UNION SELECT 6126,'Daiwil','Daiwil'
+--UNION SELECT 6130,'Willisau','Willisau'
+--UNION SELECT 6132,'Rohrmatt','Rohrmatt'
+--UNION SELECT 6133,'Hergiswil LU','Hergiswil b. Willisau'
+--UNION SELECT 6142,'Gettnau','Gettnau'
+--UNION SELECT 6143,'Ohmstal','Ohmstal'
+--UNION SELECT 6144,'Zell LU','Zell LU'
+--UNION SELECT 6145,'Fischbach LU','Fischbach LU'
+--UNION SELECT 6146,'Grossdietwil','Grossdietwil'
+--UNION SELECT 6153,'Ufhusen','Ufhusen'
+--UNION SELECT 6154,'Hofstatt','Hofstatt'
+--UNION SELECT 6156,'Luthern','Luthern'
+--UNION SELECT 6160,'Entlebuch Business','Entlebuch Businesszentrum'
+--UNION SELECT 6162,'Entlebuch','Entlebuch'
+--UNION SELECT 6163,'Ebnet','Ebnet'
+--UNION SELECT 6162,'Rengg','Rengg'
+--UNION SELECT 6162,'Finsterwald LU','Finsterwald b. Entlebuch'
+--UNION SELECT 6166,'Hasle LU','Hasle LU'
+--UNION SELECT 6167,'Bramboden','Bramboden'
+--UNION SELECT 6182,'Escholzmatt','Escholzmatt'
+--UNION SELECT 6192,'Wiggen','Wiggen'
+--UNION SELECT 6196,'Marbach LU','Marbach LU'
+--UNION SELECT 6197,'Schangnau','Schangnau'
+--UNION SELECT 6203,'Sempach Station','Sempach Station'
+--UNION SELECT 6204,'Sempach','Sempach'
+--UNION SELECT 6205,'Eich','Eich'
+--UNION SELECT 6206,'Neuenkirch','Neuenkirch'
+--UNION SELECT 6207,'Nottwil','Nottwil'
+--UNION SELECT 6208,'Oberkirch LU','Oberkirch LU'
+--UNION SELECT 6210,'Sursee','Sursee'
+--UNION SELECT 6211,'Buchs LU','Buchs LU'
+--UNION SELECT 6212,'St. Erhard','St. Erhard'
+--UNION SELECT 6213,'Knutwil','Knutwil'
+--UNION SELECT 6214,'Schenkon','Schenkon'
+--UNION SELECT 6215,'Schwarzenbach LU','Schwarzenbach LU'
+--UNION SELECT 6216,'Mauensee','Mauensee'
+--UNION SELECT 6217,'Kottwil','Kottwil'
+--UNION SELECT 6218,'Ettiswil','Ettiswil'
+--UNION SELECT 6221,'Rickenbach LU','Rickenbach LU'
+--UNION SELECT 6222,'Gunzwil','Gunzwil'
+--UNION SELECT 6231,'Schlierbach','Schlierbach'
+--UNION SELECT 6232,'Geuensee','Geuensee'
+--UNION SELECT 6234,'Triengen','Triengen'
+--UNION SELECT 6234,'Kulmerau','Kulmerau'
+--UNION SELECT 6236,'Wilihof','Wilihof'
+--UNION SELECT 6235,'Winikon','Winikon'
+--UNION SELECT 6242,'Wauwil','Wauwil'
+--UNION SELECT 6243,'Egolzwil','Egolzwil'
+--UNION SELECT 6244,'Nebikon','Nebikon'
+--UNION SELECT 6245,'Ebersecken','Ebersecken'
+--UNION SELECT 6246,'Altishofen','Altishofen'
+--UNION SELECT 6248,'Alberswil','Alberswil'
+--UNION SELECT 6252,'Dagmersellen','Dagmersellen'
+--UNION SELECT 6253,'Uffikon','Uffikon'
+--UNION SELECT 6260,'Reiden','Reiden'
+--UNION SELECT 6260,'Reidermoos','Reidermoos'
+--UNION SELECT 6262,'Langnau b. Reiden','Langnau b. Reiden'
+--UNION SELECT 6263,'Richenthal','Richenthal'
+--UNION SELECT 6264,'Pfaffnau','Pfaffnau'
+--UNION SELECT 6265,'Roggliswil','Roggliswil'
+--UNION SELECT 6274,'Eschenbach LU','Eschenbach LU'
+--UNION SELECT 6275,'Ballwil','Ballwil'
+--UNION SELECT 6276,'Hohenrain','Hohenrain'
+--UNION SELECT 6277,'Kleinwangen','Kleinwangen'
+--UNION SELECT 6280,'Hochdorf','Hochdorf'
+--UNION SELECT 6280,'Urswil','Urswil'
+--UNION SELECT 6283,'Baldegg','Baldegg'
+--UNION SELECT 6284,'Gelfingen','Gelfingen'
+--UNION SELECT 6285,'Hitzkirch','Hitzkirch'
+--UNION SELECT 6285,'Retschwil','Retschwil'
+--UNION SELECT 6286,'Altwis','Altwis'
+--UNION SELECT 6287,'Aesch LU','Aesch LU'
+--UNION SELECT 6288,'Schongau','Schongau'
+--UNION SELECT 6294,'Ermensee','Ermensee'
+--UNION SELECT 6295,'Mosen','Mosen'
+--UNION SELECT 6300,'Zug','Zug'
+--UNION SELECT 6300,'Zug Altstadt','Zug Altstadt'
+--UNION SELECT 6300,'Zug','Zug'
+--UNION SELECT 6313,'Edlibach','Edlibach'
+--UNION SELECT 6313,'Finstersee','Finstersee'
+--UNION SELECT 6319,'Allenwinden','Allenwinden'
+--UNION SELECT 6315,'Morgarten','Morgarten'
+--UNION SELECT 6312,'Steinhausen','Steinhausen'
+--UNION SELECT 6313,'Menzingen','Menzingen'
+--UNION SELECT 6315,'Alosen','Alosen'
+--UNION SELECT 6300,'Zugerberg','Zugerberg'
+--UNION SELECT 6317,'Oberwil b. Zug','Oberwil b. Zug'
+--UNION SELECT 6318,'Walchwil','Walchwil'
+--UNION SELECT 6330,'Cham','Cham'
+--UNION SELECT 6332,'Hagendorn','Hagendorn'
+--UNION SELECT 6340,'Baar','Baar'
+--UNION SELECT 6343,'Rotkreuz','Rotkreuz'
+--UNION SELECT 6344,'Meierskappel','Meierskappel'
+--UNION SELECT 6345,'Neuheim','Neuheim'
+--UNION SELECT 6353,'Weggis','Weggis'
+--UNION SELECT 6354,'Vitznau','Vitznau'
+--UNION SELECT 6356,'Rigi Kaltbad','Rigi Kaltbad'
+--UNION SELECT 6362,'Stansstad','Stansstad'
+--UNION SELECT 6365,'Kehrsiten','Kehrsiten'
+--UNION SELECT 6370,'Stans','Stans'
+--UNION SELECT 6372,'Ennetmoos','Ennetmoos'
+--UNION SELECT 6374,'Buochs','Buochs'
+--UNION SELECT 6375,'Beckenried','Beckenried'
+--UNION SELECT 6376,'Emmetten','Emmetten'
+--UNION SELECT 6377,'Seelisberg','Seelisberg'
+--UNION SELECT 6383,'Dallenwil','Dallenwil'
+--UNION SELECT 6383,'Niederrickenbach','Niederrickenbach'
+--UNION SELECT 6386,'Wolfenschiessen','Wolfenschiessen'
+--UNION SELECT 6387,'Oberrickenbach','Oberrickenbach'
+--UNION SELECT 6388,'Grafenort','Grafenort'
+--UNION SELECT 6390,'Engelberg','Engelberg'
+--UNION SELECT 6402,'Merlischachen','Merlischachen'
+--UNION SELECT 6404,'Greppen','Greppen'
+--UNION SELECT 6405,'Immensee','Immensee'
+--UNION SELECT 6410,'Goldau','Goldau'
+--UNION SELECT 6410,'Rigi Staffel','Rigi Staffel'
+--UNION SELECT 6410,'Rigi Kulm','Rigi Kulm'
+--UNION SELECT 6414,'Oberarth','Oberarth'
+--UNION SELECT 6415,'Arth','Arth'
+--UNION SELECT 6416,'Steinerberg','Steinerberg'
+--UNION SELECT 6417,'Sattel','Sattel'
+--UNION SELECT 6418,'Rothenthurm','Rothenthurm'
+--UNION SELECT 6422,'Steinen','Steinen'
+--UNION SELECT 6423,'Seewen SZ','Seewen SZ'
+--UNION SELECT 6424,'Lauerz','Lauerz'
+--UNION SELECT 6430,'Schwyz','Schwyz'
+--UNION SELECT 6436,'Ried Muotathal','Ried Muotathal'
+--UNION SELECT 6432,'Rickenbach SZ','Rickenbach b. Schwyz'
+--UNION SELECT 6433,'Stoos SZ','Stoos SZ'
+--UNION SELECT 6434,'Illgau','Illgau'
+--UNION SELECT 6436,'Muotathal','Muotathal'
+--UNION SELECT 6436,'Bisisthal','Bisisthal'
+--UNION SELECT 6438,'Ibach','Ibach'
+--UNION SELECT 6440,'Brunnen','Brunnen'
+--UNION SELECT 6442,'Gersau','Gersau'
+--UNION SELECT 6443,'Morschach','Morschach'
+--UNION SELECT 6452,'Sisikon','Sisikon'
+--UNION SELECT 6452,'Riemenstalden','Riemenstalden'
+--UNION SELECT 6460,'Altdorf UR','Altdorf UR'
+--UNION SELECT 6461,'Isenthal','Isenthal'
+--UNION SELECT 6462,'Seedorf UR','Seedorf UR'
+--UNION SELECT 6464,'Spiringen','Spiringen'
+--UNION SELECT 6466,'Bauen','Bauen'
+--UNION SELECT 6467,'Schattdorf','Schattdorf'
+--UNION SELECT 6469,'Haldi b.Schattdorf','Haldi b. Schattdorf'
+--UNION SELECT 6468,'Attinghausen','Attinghausen'
+--UNION SELECT 6472,'Erstfeld','Erstfeld'
+--UNION SELECT 6473,'Silenen','Silenen'
+--UNION SELECT 6474,'Amsteg','Amsteg'
+--UNION SELECT 6475,'Bristen','Bristen'
+--UNION SELECT 6476,'Intschi','Intschi'
+--UNION SELECT 6482,'Gurtnellen','Gurtnellen'
+--UNION SELECT 6484,'Wassen UR','Wassen UR'
+--UNION SELECT 6485,'Meien','Meien'
+--UNION SELECT 6490,'Andermatt','Andermatt'
+--UNION SELECT 6491,'Realp','Realp'
+--UNION SELECT 6493,'Hospental','Hospental'
+--UNION SELECT 6500,'Bellinzona','Bellinzona'
+--UNION SELECT 6500,'Bellinzona 1','Bellinzona 1'
+--UNION SELECT 6500,'Bellinzona 2','Bellinzona 2'
+--UNION SELECT 6500,'Bellinzona 4','Bellinzona 4'
+--UNION SELECT 6500,'Bellinzona 5','Bellinzona 5'
+--UNION SELECT 6500,'Bellinzona','Bellinzona'
+--UNION SELECT 6500,'Bellinzona Caserma','Bellinzona Caserma'
+--UNION SELECT 6500,'Bellinzona','Bellinzona'
+--UNION SELECT 6500,'Bellinzona 6 Autop','Bellinzona 6 Autopostale TI'
+--UNION SELECT 6512,'Giubiasco','Giubiasco'
+--UNION SELECT 6513,'Monte Carasso','Monte Carasso'
+--UNION SELECT 6514,'Sementina','Sementina'
+--UNION SELECT 6515,'Gudo','Gudo'
+--UNION SELECT 6516,'Cugnasco','Cugnasco'
+--UNION SELECT 6517,'Arbedo','Arbedo'
+--UNION SELECT 6518,'Gorduno','Gorduno'
+--UNION SELECT 6525,'Gnosca','Gnosca'
+--UNION SELECT 6526,'Prosito','Prosito'
+--UNION SELECT 6527,'Lodrino','Lodrino'
+--UNION SELECT 6528,'Camorino','Camorino'
+--UNION SELECT 6532,'Castione','Castione'
+--UNION SELECT 6533,'Lumino','Lumino'
+--UNION SELECT 6534,'S. Vittore','S. Vittore'
+--UNION SELECT 6535,'Roveredo GR','Roveredo GR'
+--UNION SELECT 6537,'Grono','Grono'
+--UNION SELECT 6523,'Preonzo','Preonzo'
+--UNION SELECT 6524,'Moleno','Moleno'
+--UNION SELECT 6582,'Pianezzo','Pianezzo'
+--UNION SELECT 6583,'S. Antonio','S. Antonio Val Morobbia'
+--UNION SELECT 6584,'Carena','Carena'
+--UNION SELECT 6549,'Laura','Laura'
+--UNION SELECT 6540,'Castaneda','Castaneda'
+--UNION SELECT 6541,'Sta. Maria','Sta. Maria in Calanca'
+--UNION SELECT 6538,'Verdabbio','Verdabbio'
+--UNION SELECT 6542,'Buseno','Buseno'
+--UNION SELECT 6543,'Arvigo','Arvigo'
+--UNION SELECT 6544,'Braggio','Braggio'
+--UNION SELECT 6545,'Selma','Selma'
+--UNION SELECT 6546,'Cauco','Cauco'
+--UNION SELECT 6548,'Augio','Augio'
+--UNION SELECT 6548,'Rossa','Rossa'
+--UNION SELECT 6556,'Leggia','Leggia'
+--UNION SELECT 6565,'S. Bernardino','S. Bernardino'
+--UNION SELECT 6557,'Cama','Cama'
+--UNION SELECT 6558,'Lostallo','Lostallo'
+--UNION SELECT 6558,'Cabbiolo','Cabbiolo'
+--UNION SELECT 6562,'Soazza','Soazza'
+--UNION SELECT 6563,'Mesocco','Mesocco'
+--UNION SELECT 6572,'Quartino','Quartino'
+--UNION SELECT 6573,'Magadino','Magadino'
+--UNION SELECT 6574,'Vira Gambarogno','Vira Gambarogno'
+--UNION SELECT 6575,'S. Nazzaro','S. Nazzaro'
+--UNION SELECT 6575,'Vairano','Vairano'
+--UNION SELECT 6576,'Gerra Gambarogno','Gerra Gambarogno'
+--UNION SELECT 6577,'Ranzo','Ranzo'
+--UNION SELECT 6578,'Caviano','Caviano'
+--UNION SELECT 6579,'Piazzogna','Piazzogna'
+--UNION SELECT 6571,'Indemini','Indemini'
+--UNION SELECT 6592,'S. Antonino','S. Antonino'
+--UNION SELECT 6593,'Cadenazzo','Cadenazzo'
+--UNION SELECT 6594,'Contone','Contone'
+--UNION SELECT 6595,'Riazzino','Riazzino'
+--UNION SELECT 6596,'Gordola','Gordola'
+--UNION SELECT 6597,'Agarone','Agarone'
+--UNION SELECT 6598,'Tenero','Tenero'
+--UNION SELECT 6599,'Robasacco','Robasacco'
+--UNION SELECT 6600,'Locarno','Locarno'
+--UNION SELECT 6600,'Locarno 1','Locarno 1'
+--UNION SELECT 6600,'Muralto','Muralto'
+--UNION SELECT 6600,'Locarno','Locarno'
+--UNION SELECT 6600,'Locarno Dist','Locarno Distribuzione'
+--UNION SELECT 6600,'Locarno','Locarno'
+--UNION SELECT 6600,'Locarno','Locarno'
+--UNION SELECT 6656,'Golino','Golino'
+--UNION SELECT 6618,'Arcegno','Arcegno'
+--UNION SELECT 6646,'Contra','Contra'
+--UNION SELECT 6647,'Mergoscia','Mergoscia'
+--UNION SELECT 6661,'Auressio','Auressio'
+--UNION SELECT 6661,'Loco','Loco'
+--UNION SELECT 6661,'Berzona','Berzona'
+--UNION SELECT 6611,'Mosogno','Mosogno'
+--UNION SELECT 6662,'Russo','Russo'
+--UNION SELECT 6664,'Vergeletto','Vergeletto'
+--UNION SELECT 6611,'Gresso','Gresso'
+--UNION SELECT 6611,'Crana','Crana'
+--UNION SELECT 6663,'Comologno','Comologno'
+--UNION SELECT 6663,'Spruga','Spruga'
+--UNION SELECT 6632,'Vogorno','Vogorno'
+--UNION SELECT 6631,'Corippo','Corippo'
+--UNION SELECT 6633,'Lavertezzo','Lavertezzo'
+--UNION SELECT 6634,'Brione Verzasca','Brione Verzasca'
+--UNION SELECT 6635,'Gerra Verzasca','Gerra Verzasca'
+--UNION SELECT 6636,'Frasco','Frasco'
+--UNION SELECT 6637,'Sonogno','Sonogno'
+--UNION SELECT 6612,'Ascona','Ascona'
+--UNION SELECT 6613,'Porto Ronco','Porto Ronco'
+--UNION SELECT 6614,'Brissago','Brissago'
+--UNION SELECT 6614,'Isole di Brissago','Isole di Brissago'
+--UNION SELECT 6616,'Losone','Losone'
+--UNION SELECT 6622,'Ronco sopra Ascona','Ronco sopra Ascona'
+--UNION SELECT 6644,'Orselina','Orselina'
+--UNION SELECT 6645,'Brione s. Minusio','Brione sopra Minusio'
+--UNION SELECT 6648,'Minusio','Minusio'
+--UNION SELECT 6655,'Verdasio','Verdasio'
+--UNION SELECT 6655,'Rasa','Rasa'
+--UNION SELECT 6657,'Palagnedra','Palagnedra'
+--UNION SELECT 6658,'Borgnone','Borgnone'
+--UNION SELECT 6659,'Camedo','Camedo'
+--UNION SELECT 6659,'Moneto','Moneto'
+--UNION SELECT 6652,'Tegna','Tegna'
+--UNION SELECT 6653,'Verscio','Verscio'
+--UNION SELECT 6654,'Cavigliano','Cavigliano'
+--UNION SELECT 6655,'Intragna','Intragna'
+--UNION SELECT 6670,'Avegno','Avegno'
+--UNION SELECT 6677,'Moghegno','Moghegno'
+--UNION SELECT 6678,'Coglio','Coglio'
+--UNION SELECT 6678,'Lodano','Lodano'
+--UNION SELECT 6678,'Giumaglio','Giumaglio'
+--UNION SELECT 6674,'Riveo','Riveo'
+--UNION SELECT 6682,'Linescio','Linescio'
+--UNION SELECT 6683,'Cerentino','Cerentino'
+--UNION SELECT 6685,'Bosco/Gurin','Bosco/Gurin'
+--UNION SELECT 6683,'Niva Vallemaggia','Niva Vallemaggia'
+--UNION SELECT 6684,'Campo VM','Campo Vallemaggia'
+--UNION SELECT 6684,'Cimalmotto','Cimalmotto'
+--UNION SELECT 6690,'Cavergno','Cavergno'
+--UNION SELECT 6690,'S. Carlo','S. Carlo Val Bavona'
+--UNION SELECT 6692,'Brontallo','Brontallo'
+--UNION SELECT 6692,'Menzonio','Menzonio'
+--UNION SELECT 6693,'Broglio','Broglio'
+--UNION SELECT 6694,'Prato-Sornico','Prato-Sornico'
+--UNION SELECT 6695,'Peccia','Peccia'
+--UNION SELECT 6695,'Piano di Peccia','Piano di Peccia'
+--UNION SELECT 6696,'Fusio','Fusio'
+--UNION SELECT 6672,'Gordevio','Gordevio'
+--UNION SELECT 6673,'Maggia','Maggia'
+--UNION SELECT 6674,'Someo','Someo'
+--UNION SELECT 6675,'Cevio','Cevio'
+--UNION SELECT 6676,'Bignasco','Bignasco'
+--UNION SELECT 6702,'Claro','Claro'
+--UNION SELECT 6703,'Osogna','Osogna'
+--UNION SELECT 6705,'Cresciano','Cresciano'
+--UNION SELECT 6707,'Iragna','Iragna'
+--UNION SELECT 6710,'Biasca','Biasca'
+--UNION SELECT 6710,'Biasca Stazione','Biasca Stazione'
+--UNION SELECT 6721,'Ludiano','Ludiano'
+--UNION SELECT 6722,'Corzoneso','Corzoneso'
+--UNION SELECT 6716,'Leontica','Leontica'
+--UNION SELECT 6723,'Prugiasco','Prugiasco'
+--UNION SELECT 6723,'Castro','Castro'
+--UNION SELECT 6724,'Ponto Valentino','Ponto Valentino'
+--UNION SELECT 6716,'Lottigna','Lottigna'
+--UNION SELECT 6719,'Aquila','Aquila'
+--UNION SELECT 6720,'Campo Blenio','Campo Blenio'
+--UNION SELECT 6721,'Motto Blenio','Motto Blenio'
+--UNION SELECT 6713,'Malvaglia','Malvaglia'
+--UNION SELECT 6714,'Semione','Semione'
+--UNION SELECT 6715,'Dongio','Dongio'
+--UNION SELECT 6716,'Acquarossa','Acquarossa'
+--UNION SELECT 6717,'Dangio','Dangio'
+--UNION SELECT 6717,'Torre','Torre'
+--UNION SELECT 6718,'Olivone','Olivone'
+--UNION SELECT 6718,'Camperio','Camperio'
+--UNION SELECT 6742,'Pollegio','Pollegio'
+--UNION SELECT 6743,'Bodio TI','Bodio TI'
+--UNION SELECT 6745,'Giornico','Giornico'
+--UNION SELECT 6746,'Lavorgo','Lavorgo'
+--UNION SELECT 6746,'Calonico','Calonico'
+--UNION SELECT 6746,'Nivo','Nivo'
+--UNION SELECT 6747,'Chironico','Chironico'
+--UNION SELECT 6760,'Faido','Faido'
+--UNION SELECT 6760,'Molare','Molare'
+--UNION SELECT 6760,'Calpiogna','Calpiogna'
+--UNION SELECT 6760,'Campello','Campello'
+--UNION SELECT 6772,'Rodi-Fiesso','Rodi-Fiesso'
+--UNION SELECT 6776,'Piotta','Piotta'
+--UNION SELECT 6777,'Quinto','Quinto'
+--UNION SELECT 6777,'Varenzo','Varenzo'
+--UNION SELECT 6780,'Airolo','Airolo'
+--UNION SELECT 6781,'Villa Bedretto','Villa Bedretto'
+--UNION SELECT 6780,'Madrano','Madrano'
+--UNION SELECT 6781,'Bedretto','Bedretto'
+--UNION SELECT 6744,'Personico','Personico'
+--UNION SELECT 6748,'Anzonico','Anzonico'
+--UNION SELECT 6749,'Sobrio','Sobrio'
+--UNION SELECT 6749,'Cavagnago','Cavagnago'
+--UNION SELECT 6763,'Mairengo','Mairengo'
+--UNION SELECT 6763,'Osco','Osco'
+--UNION SELECT 6760,'Rossura','Rossura'
+--UNION SELECT 6764,'Chiggiogna','Chiggiogna'
+--UNION SELECT 6773,'Prato Leventina','Prato Leventina'
+--UNION SELECT 6774,'Dalpe','Dalpe'
+--UNION SELECT 6802,'Rivera','Rivera'
+--UNION SELECT 6804,'Bironico','Bironico'
+--UNION SELECT 6803,'Camignolo','Camignolo'
+--UNION SELECT 6807,'Taverne','Taverne'
+--UNION SELECT 6808,'Torricella','Torricella'
+--UNION SELECT 6814,'Lamone-Cadempino','Lamone-Cadempino'
+--UNION SELECT 6815,'Melide','Melide'
+--UNION SELECT 6816,'Bissone','Bissone'
+--UNION SELECT 6817,'Maroggia','Maroggia'
+--UNION SELECT 6818,'Melano','Melano'
+--UNION SELECT 6822,'Arogno','Arogno'
+--UNION SELECT 6825,'Capolago','Capolago'
+--UNION SELECT 6826,'Riva San Vitale','Riva San Vitale'
+--UNION SELECT 6828,'Balerna','Balerna'
+--UNION SELECT 6830,'Chiasso','Chiasso'
+--UNION SELECT 6830,'Chiasso 1','Chiasso 1'
+--UNION SELECT 6830,'Chiasso 3','Chiasso 3'
+--UNION SELECT 6839,'Sagno','Sagno'
+--UNION SELECT 6837,'Caneggio','Caneggio'
+--UNION SELECT 6837,'Bruzella','Bruzella'
+--UNION SELECT 6838,'Cabbio','Cabbio'
+--UNION SELECT 6838,'Muggio','Muggio'
+--UNION SELECT 6832,'Pedrinate','Pedrinate'
+--UNION SELECT 6832,'Seseglio','Seseglio'
+--UNION SELECT 6833,'Vacallo','Vacallo'
+--UNION SELECT 6834,'Morbio Inferiore','Morbio Inferiore'
+--UNION SELECT 6836,'Serfontana','Serfontana'
+--UNION SELECT 6835,'Morbio Superiore','Morbio Superiore'
+--UNION SELECT 6809,'Medeglia','Medeglia'
+--UNION SELECT 6810,'Isone','Isone'
+--UNION SELECT 6805,'Mezzovico','Mezzovico'
+--UNION SELECT 6806,'Sigirino','Sigirino'
+--UNION SELECT 6821,'Rovio','Rovio'
+--UNION SELECT 6823,'Pugerna','Pugerna'
+--UNION SELECT 6850,'Mendrisio','Mendrisio'
+--UNION SELECT 6850,'Mendrisio Stazione','Mendrisio Stazione'
+--UNION SELECT 6850,'Mendrisio Borgo','Mendrisio Borgo'
+--UNION SELECT 6875,'Monte','Monte'
+--UNION SELECT 6875,'Casima','Casima'
+--UNION SELECT 6873,'Corteglia','Corteglia'
+--UNION SELECT 6852,'Genestrerio','Genestrerio'
+--UNION SELECT 6853,'Ligornetto','Ligornetto'
+--UNION SELECT 6854,'S. Pietro','S. Pietro'
+--UNION SELECT 6855,'Stabio','Stabio'
+--UNION SELECT 6862,'Rancate','Rancate'
+--UNION SELECT 6863,'Besazio','Besazio'
+--UNION SELECT 6864,'Arzo','Arzo'
+--UNION SELECT 6865,'Tremona','Tremona'
+--UNION SELECT 6866,'Meride','Meride'
+--UNION SELECT 6867,'Serpiano','Serpiano'
+--UNION SELECT 6872,'Salorino','Salorino'
+--UNION SELECT 6872,'Somazzo','Somazzo'
+--UNION SELECT 6874,'Castel San Pietro','Castel San Pietro'
+--UNION SELECT 6877,'Coldrerio','Coldrerio'
+--UNION SELECT 6883,'Novazzano','Novazzano'
+--UNION SELECT 6900,'Lugano','Lugano'
+--UNION SELECT 6900,'Lugano 1','Lugano 1'
+--UNION SELECT 6900,'Massagno','Massagno'
+--UNION SELECT 6900,'Lugano','Lugano'
+--UNION SELECT 6900,'Lugano 2 Caselle','Lugano 2 Paradiso Caselle'
+--UNION SELECT 6900,'Lugano','Lugano'
+--UNION SELECT 6900,'Lugano 4 Caselle','Lugano 4 Molino Nuovo Casel'
+--UNION SELECT 6900,'Lugano 5 Autoposta','Lugano 5 Serv Autopostali'
+--UNION SELECT 6900,'Lugano 6 Caselle','Lugano 6 Cassarate Caselle'
+--UNION SELECT 6913,'Carabbia','Carabbia'
+--UNION SELECT 6915,'Pambio-Noranco','Pambio-Noranco'
+--UNION SELECT 6916,'Grancia','Grancia'
+--UNION SELECT 6917,'Barbengo','Barbengo'
+--UNION SELECT 6919,'Carabietta','Carabietta'
+--UNION SELECT 6921,'Vico Morcote','Vico Morcote'
+--UNION SELECT 6928,'Manno','Manno'
+--UNION SELECT 6929,'Gravesano','Gravesano'
+--UNION SELECT 6930,'Bedano','Bedano'
+--UNION SELECT 6939,'Arosio','Arosio'
+--UNION SELECT 6939,'Mugena','Mugena'
+--UNION SELECT 6938,'Vezio','Vezio'
+--UNION SELECT 6937,'Breno','Breno'
+--UNION SELECT 6938,'Fescoggia','Fescoggia'
+--UNION SELECT 6949,'Comano','Comano'
+--UNION SELECT 6827,'Brusino Arsizio','Brusino Arsizio'
+--UNION SELECT 6912,'Pazzallo','Pazzallo'
+--UNION SELECT 6914,'Carona','Carona'
+--UNION SELECT 6918,'Figino','Figino'
+--UNION SELECT 6922,'Morcote','Morcote'
+--UNION SELECT 6924,'Sorengo','Sorengo'
+--UNION SELECT 6925,'Gentilino','Gentilino'
+--UNION SELECT 6926,'Montagnola','Montagnola'
+--UNION SELECT 6927,'Agra','Agra'
+--UNION SELECT 6932,'Breganzona','Breganzona'
+--UNION SELECT 6933,'Muzzano','Muzzano'
+--UNION SELECT 6934,'Bioggio','Bioggio'
+--UNION SELECT 6935,'Bosco Luganese','Bosco Luganese'
+--UNION SELECT 6936,'Cademario','Cademario'
+--UNION SELECT 6942,'Savosa','Savosa'
+--UNION SELECT 6943,'Vezia','Vezia'
+--UNION SELECT 6948,'Porza','Porza'
+--UNION SELECT 6950,'Tesserete','Tesserete'
+--UNION SELECT 6944,'Cureglia','Cureglia'
+--UNION SELECT 6945,'Origlio','Origlio'
+--UNION SELECT 6946,'Ponte Capriasca','Ponte Capriasca'
+--UNION SELECT 6947,'Vaglio','Vaglio'
+--UNION SELECT 6954,'Sala Capriasca','Sala Capriasca'
+--UNION SELECT 6954,'Bigorio','Bigorio'
+--UNION SELECT 6953,'Lugaggia','Lugaggia'
+--UNION SELECT 6951,'Insone','Insone'
+--UNION SELECT 6956,'Lopagno','Lopagno'
+--UNION SELECT 6957,'Roveredo TI','Roveredo TI'
+--UNION SELECT 6958,'Bidogno','Bidogno'
+--UNION SELECT 6958,'Corticiasca','Corticiasca'
+--UNION SELECT 6951,'Scareglia','Scareglia'
+--UNION SELECT 6951,'Colla','Colla'
+--UNION SELECT 6951,'Bogno','Bogno'
+--UNION SELECT 6951,'Cozzo','Cozzo'
+--UNION SELECT 6955,'Cagiallo','Cagiallo'
+--UNION SELECT 6955,'Oggio','Oggio'
+--UNION SELECT 6959,'Cimadera','Cimadera'
+--UNION SELECT 6959,'Maglio di Colla','Maglio di Colla'
+--UNION SELECT 6959,'Certara','Certara'
+--UNION SELECT 6959,'Curtina','Curtina'
+--UNION SELECT 6959,'Piandera Paese','Piandera Paese'
+--UNION SELECT 6952,'Canobbio','Canobbio'
+--UNION SELECT 6962,'Viganello','Viganello'
+--UNION SELECT 6963,'Pregassona','Pregassona'
+--UNION SELECT 6964,'Davesco-Soragno','Davesco-Soragno'
+--UNION SELECT 6965,'Cadro','Cadro'
+--UNION SELECT 6966,'Villa Luganese','Villa Luganese'
+--UNION SELECT 6967,'Dino','Dino'
+--UNION SELECT 6968,'Sonvico','Sonvico'
+--UNION SELECT 6974,'Aldesago','Aldesago'
+--UNION SELECT 6976,'Castagnola','Castagnola'
+--UNION SELECT 6977,'Ruvigliana','Ruvigliana'
+--UNION SELECT 6978,'Gandria','Gandria'
+--UNION SELECT 6990,'Cassina d''Agno','Cassina d''Agno'
+--UNION SELECT 6991,'Neggio','Neggio'
+--UNION SELECT 6992,'Vernate','Vernate'
+--UNION SELECT 6993,'Iseo','Iseo'
+--UNION SELECT 6994,'Aranno','Aranno'
+--UNION SELECT 6992,'Cimo','Cimo'
+--UNION SELECT 6981,'Bedigliora','Bedigliora'
+--UNION SELECT 6980,'Castelrotto','Castelrotto'
+--UNION SELECT 6981,'Bombinasco','Bombinasco'
+--UNION SELECT 6981,'Banco','Banco'
+--UNION SELECT 6999,'Astano','Astano'
+--UNION SELECT 6986,'Miglieglia','Miglieglia'
+--UNION SELECT 6989,'Purasca','Purasca'
+--UNION SELECT 6997,'Sessa','Sessa'
+--UNION SELECT 6982,'Agno','Agno'
+--UNION SELECT 6983,'Magliaso','Magliaso'
+--UNION SELECT 6984,'Pura','Pura'
+--UNION SELECT 6986,'Curio','Curio'
+--UNION SELECT 6986,'Novaggio','Novaggio'
+--UNION SELECT 6987,'Caslano','Caslano'
+--UNION SELECT 6988,'Ponte Tresa','Ponte Tresa'
+--UNION SELECT 7000,'Chur','Chur'
+--UNION SELECT 7000,'Chur 1 Annahme','Chur 1 Annahme'
+--UNION SELECT 7000,'Chur 1 Zustellung','Chur 1 Zustellung'
+--UNION SELECT 7000,'Chur Kaserne','Chur Kaserne'
+--UNION SELECT 7000,'Chur','Chur'
+--UNION SELECT 7000,'Chur','Chur'
+--UNION SELECT 7000,'Chur','Chur'
+--UNION SELECT 7000,'Chur','Chur'
+--UNION SELECT 7012,'Felsberg','Felsberg'
+--UNION SELECT 7013,'Domat/Ems','Domat/Ems'
+--UNION SELECT 7015,'Tamins','Tamins'
+--UNION SELECT 7017,'Flims Dorf','Flims Dorf'
+--UNION SELECT 7018,'Flims Waldhaus','Flims Waldhaus'
+--UNION SELECT 7023,'Haldenstein','Haldenstein'
+--UNION SELECT 7026,'Maladers','Maladers'
+--UNION SELECT 7031,'Laax GR','Laax GR'
+--UNION SELECT 7031,'Laax GR 2','Laax GR 2'
+--UNION SELECT 7050,'Arosa','Arosa'
+--UNION SELECT 7062,'Passugg','Passugg'
+--UNION SELECT 7063,'Praden','Praden'
+--UNION SELECT 7064,'Tschiertschen','Tschiertschen'
+--UNION SELECT 7074,'Malix','Malix'
+--UNION SELECT 7075,'Churwalden','Churwalden'
+--UNION SELECT 7076,'Parpan','Parpan'
+--UNION SELECT 7077,'Valbella','Valbella'
+--UNION SELECT 7078,'Lenzerheide/Lai','Lenzerheide/Lai'
+--UNION SELECT 7082,'Vaz/Obervaz','Vaz/Obervaz'
+--UNION SELECT 7083,'Lantsch/Lenz','Lantsch/Lenz'
+--UNION SELECT 7084,'Brienz/Brinzauls','Brienz/Brinzauls GR'
+--UNION SELECT 7014,'Trin','Trin'
+--UNION SELECT 7016,'Trin Mulin','Trin Mulin'
+--UNION SELECT 7019,'Fidaz','Fidaz'
+--UNION SELECT 7027,'Castiel','Castiel'
+--UNION SELECT 7028,'St. Peter','St. Peter'
+--UNION SELECT 7028,'Pagig','Pagig'
+--UNION SELECT 7056,'Molinis','Molinis'
+--UNION SELECT 7029,'Peist','Peist'
+--UNION SELECT 7057,'Langwies','Langwies'
+--UNION SELECT 7104,'Versam','Versam'
+--UNION SELECT 7106,'Tenna','Tenna'
+--UNION SELECT 7107,'Safien Platz','Safien Platz'
+--UNION SELECT 7109,'Thalkirch','Thalkirch'
+--UNION SELECT 7122,'Valendas','Valendas'
+--UNION SELECT 7126,'Castrisch','Castrisch'
+--UNION SELECT 7130,'Ilanz','Ilanz'
+--UNION SELECT 7154,'Ruschein','Ruschein'
+--UNION SELECT 7155,'Ladir','Ladir'
+--UNION SELECT 7151,'Schluein','Schluein'
+--UNION SELECT 7153,'Falera','Falera'
+--UNION SELECT 7152,'Sagogn','Sagogn'
+--UNION SELECT 7127,'Sevgein','Sevgein'
+--UNION SELECT 7128,'Riein','Riein'
+--UNION SELECT 7111,'Pitasch','Pitasch'
+--UNION SELECT 7112,'Duvin','Duvin'
+--UNION SELECT 7113,'Camuns','Camuns'
+--UNION SELECT 7114,'Uors Lumnezia','Uors Lumnezia'
+--UNION SELECT 7115,'Surcasti','Surcasti'
+--UNION SELECT 7116,'Tersnaus','Tersnaus'
+--UNION SELECT 7141,'Luven','Luven'
+--UNION SELECT 7142,'Cumbel','Cumbel'
+--UNION SELECT 7143,'Morissen','Morissen'
+--UNION SELECT 7144,'Vella','Vella'
+--UNION SELECT 7145,'Degen','Degen'
+--UNION SELECT 7146,'Vattiz','Vattiz'
+--UNION SELECT 7147,'Vignogn','Vignogn'
+--UNION SELECT 7148,'Lumbrein','Lumbrein'
+--UNION SELECT 7149,'Vrin','Vrin'
+--UNION SELECT 7137,'Flond','Flond'
+--UNION SELECT 7138,'Surcuolm','Surcuolm'
+--UNION SELECT 7132,'Vals','Vals'
+--UNION SELECT 7134,'Obersaxen','Obersaxen'
+--UNION SELECT 7156,'Pigniu','Pigniu'
+--UNION SELECT 7156,'Rueun','Rueun'
+--UNION SELECT 7157,'Siat','Siat'
+--UNION SELECT 7158,'Waltensburg/Vuorz','Waltensburg/Vuorz'
+--UNION SELECT 7159,'Andiast','Andiast'
+--UNION SELECT 7162,'Tavanasa','Tavanasa'
+--UNION SELECT 7163,'Danis','Danis'
+--UNION SELECT 7164,'Dardin','Dardin'
+--UNION SELECT 7165,'Breil/Brigels','Breil/Brigels'
+--UNION SELECT 7166,'Trun','Trun'
+--UNION SELECT 7168,'Schlans','Schlans'
+--UNION SELECT 7167,'Zignau','Zignau'
+--UNION SELECT 7172,'Rabius','Rabius'
+--UNION SELECT 7175,'Sumvitg','Sumvitg'
+--UNION SELECT 7174,'S. Benedetg','S. Benedetg'
+--UNION SELECT 7182,'Cavardiras','Cavardiras'
+--UNION SELECT 7184,'Curaglia','Curaglia'
+--UNION SELECT 7185,'Platta','Platta'
+--UNION SELECT 7186,'Segnas','Segnas'
+--UNION SELECT 7187,'Camischolas','Camischolas'
+--UNION SELECT 7189,'Rueras','Rueras'
+--UNION SELECT 7188,'Sedrun','Sedrun'
+--UNION SELECT 7173,'Surrein','Surrein'
+--UNION SELECT 7176,'Cumpadials','Cumpadials'
+--UNION SELECT 7203,'Trimmis','Trimmis'
+--UNION SELECT 7202,'Says','Says'
+--UNION SELECT 7204,'Untervaz','Untervaz'
+--UNION SELECT 7205,'Zizers','Zizers'
+--UNION SELECT 7206,'Igis','Igis'
+--UNION SELECT 7208,'Malans GR','Malans GR'
+--UNION SELECT 7212,'Seewis Dorf','Seewis Dorf'
+--UNION SELECT 7213,'Valzeina','Valzeina'
+--UNION SELECT 7215,'Fanas','Fanas'
+--UNION SELECT 7220,'Schiers','Schiers'
+--UNION SELECT 7228,'Schuders','Schuders'
+--UNION SELECT 7226,'Stels','Stels'
+--UNION SELECT 7222,'Lunden','Lunden'
+--UNION SELECT 7224,'Putz','Putz'
+--UNION SELECT 7228,'Pusserein','Pusserein'
+--UNION SELECT 7231,'Pragg-Jenaz','Pragg-Jenaz'
+--UNION SELECT 7232,'Furna','Furna'
+--UNION SELECT 7233,'Jenaz','Jenaz'
+--UNION SELECT 7235,'Fideris','Fideris'
+--UNION SELECT 7242,'Luzein','Luzein'
+--UNION SELECT 7243,'Pany','Pany'
+--UNION SELECT 7245,'Ascharina','Ascharina'
+--UNION SELECT 7249,'Serneus','Serneus'
+--UNION SELECT 7250,'Klosters','Klosters'
+--UNION SELECT 7252,'Klosters Dorf','Klosters Dorf'
+--UNION SELECT 7260,'Davos Dorf','Davos Dorf'
+--UNION SELECT 7265,'Davos Wolfgang','Davos Wolfgang'
+--UNION SELECT 7270,'Davos Platz','Davos Platz'
+--UNION SELECT 7272,'Davos Clavadel','Davos Clavadel'
+--UNION SELECT 7276,'Davos Frauenkirch','Davos Frauenkirch'
+--UNION SELECT 7277,'Davos Glaris','Davos Glaris'
+--UNION SELECT 7278,'Davos Monstein','Davos Monstein'
+--UNION SELECT 7302,'Landquart','Landquart'
+--UNION SELECT 7303,'Mastrils','Mastrils'
+--UNION SELECT 7304,'Maienfeld','Maienfeld'
+--UNION SELECT 7307,'Jenins','Jenins'
+--UNION SELECT 7310,'Bad Ragaz','Bad Ragaz'
+--UNION SELECT 7317,'Valens','Valens'
+--UNION SELECT 7314,'Vadura','Vadura'
+--UNION SELECT 7313,'St. Margrethenberg','St. Margrethenberg'
+--UNION SELECT 7320,'Sargans','Sargans'
+--UNION SELECT 7325,'Schwendi','Schwendi im Weisstannental'
+--UNION SELECT 7326,'Weisstannen','Weisstannen'
+--UNION SELECT 7323,'Wangs','Wangs'
+--UNION SELECT 7324,'Vilters','Vilters'
+--UNION SELECT 7402,'Bonaduz','Bonaduz'
+--UNION SELECT 7404,'Feldis/Veulden','Feldis/Veulden'
+--UNION SELECT 7405,'Rothenbrunnen','Rothenbrunnen'
+--UNION SELECT 7408,'Cazis','Cazis'
+--UNION SELECT 7411,'Sils im Domleschg','Sils im Domleschg'
+--UNION SELECT 7412,'Scharans','Scharans'
+--UNION SELECT 7415,'Rodels','Rodels'
+--UNION SELECT 7416,'Almens','Almens'
+--UNION SELECT 7417,'Paspels','Paspels'
+--UNION SELECT 7407,'Trans','Trans'
+--UNION SELECT 7418,'Tumegl/Tomils','Tumegl/Tomils'
+--UNION SELECT 7419,'Scheid','Scheid'
+--UNION SELECT 7430,'Thusis','Thusis'
+--UNION SELECT 7425,'Masein','Masein'
+--UNION SELECT 7426,'Flerden','Flerden'
+--UNION SELECT 7427,'Urmein','Urmein'
+--UNION SELECT 7428,'Tschappina','Tschappina'
+--UNION SELECT 7421,'Summaprada','Summaprada'
+--UNION SELECT 7422,'Tartar','Tartar'
+--UNION SELECT 7423,'Sarn','Sarn'
+--UNION SELECT 7424,'Dalin','Dalin'
+--UNION SELECT 7431,'Mutten','Mutten'
+--UNION SELECT 7430,'Rongellen','Rongellen'
+--UNION SELECT 7432,'Zillis','Zillis'
+--UNION SELECT 7433,'Donat','Donat'
+--UNION SELECT 7433,'Mathon','Mathon'
+--UNION SELECT 7433,'Wergenstein','Wergenstein'
+--UNION SELECT 7433,'Lohn GR','Lohn GR'
+--UNION SELECT 7434,'Sufers','Sufers'
+--UNION SELECT 7436,'Medels','Medels im Rheinwald'
+--UNION SELECT 7437,'Nufenen','Nufenen'
+--UNION SELECT 7438,'Hinterrhein','Hinterrhein'
+--UNION SELECT 7440,'Andeer','Andeer'
+--UNION SELECT 7442,'Clugin','Clugin'
+--UNION SELECT 7443,'Pignia','Pignia'
+--UNION SELECT 7444,'Ausserferrera','Ausserferrera'
+--UNION SELECT 7445,'Innerferrera','Innerferrera'
+--UNION SELECT 7447,'Avers','Avers'
+--UNION SELECT 7448,'Juf','Juf'
+--UNION SELECT 7450,'Tiefencastel','Tiefencastel'
+--UNION SELECT 7458,'Mon','Mon'
+--UNION SELECT 7459,'Stierva','Stierva'
+--UNION SELECT 7451,'Alvaschein','Alvaschein'
+--UNION SELECT 7452,'Cunter','Cunter'
+--UNION SELECT 7453,'Tinizong','Tinizong'
+--UNION SELECT 7454,'Rona','Rona'
+--UNION SELECT 7455,'Mulegns','Mulegns'
+--UNION SELECT 7456,'Sur','Sur'
+--UNION SELECT 7457,'Bivio','Bivio'
+--UNION SELECT 7460,'Savognin','Savognin'
+--UNION SELECT 7462,'Salouf','Salouf'
+--UNION SELECT 7463,'Riom','Riom'
+--UNION SELECT 7464,'Parsonz','Parsonz'
+--UNION SELECT 7472,'Surava','Surava'
+--UNION SELECT 7473,'Alvaneu Bad','Alvaneu Bad'
+--UNION SELECT 7477,'Filisur','Filisur'
+--UNION SELECT 7482,'Stugl/Stuls','Stugl/Stuls'
+--UNION SELECT 7484,'Latsch','Latsch'
+--UNION SELECT 7482,'Preda','Preda'
+--UNION SELECT 7492,'Alvaneu Dorf','Alvaneu Dorf'
+--UNION SELECT 7493,'Schmitten Albula','Schmitten Albula'
+--UNION SELECT 7494,'Davos Wiesen','Davos Wiesen'
+--UNION SELECT 7500,'St. Moritz','St. Moritz'
+--UNION SELECT 7500,'St. Moritz 1','St. Moritz 1'
+--UNION SELECT 7500,'St. Moritz 3','St. Moritz 3'
+--UNION SELECT 7502,'Bever','Bever'
+--UNION SELECT 7503,'Samedan','Samedan'
+--UNION SELECT 7504,'Pontresina','Pontresina'
+--UNION SELECT 7505,'Celerina','Celerina/Schlarigna'
+--UNION SELECT 7513,'Silvaplana','Silvaplana'
+--UNION SELECT 7514,'Sils/Segl Maria','Sils/Segl Maria'
+--UNION SELECT 7514,'Fex','Fex'
+--UNION SELECT 7515,'Sils/Segl Baselgia','Sils/Segl Baselgia'
+--UNION SELECT 7516,'Maloja','Maloja'
+--UNION SELECT 7517,'Plaun da Lej','Plaun da Lej'
+--UNION SELECT 7522,'La Punt Chamues-ch','La Punt Chamues-ch'
+--UNION SELECT 7523,'Madulain','Madulain'
+--UNION SELECT 7524,'Zuoz','Zuoz'
+--UNION SELECT 7525,'S-chanf','S-chanf'
+--UNION SELECT 7526,'Cinuos-chel','Cinuos-chel'
+--UNION SELECT 7527,'Brail','Brail'
+--UNION SELECT 7530,'Zernez','Zernez'
+--UNION SELECT 7532,'Tschierv','Tschierv'
+--UNION SELECT 7533,'Fuldera','Fuldera'
+--UNION SELECT 7535,'Valchava','Valchava'
+--UNION SELECT 7542,'Susch','Susch'
+--UNION SELECT 7543,'Lavin','Lavin'
+--UNION SELECT 7545,'Guarda','Guarda'
+--UNION SELECT 7546,'Ardez','Ardez'
+--UNION SELECT 7550,'Scuol','Scuol'
+--UNION SELECT 7551,'Ftan','Ftan'
+--UNION SELECT 7552,'Vulpera','Vulpera'
+--UNION SELECT 7553,'Tarasp','Tarasp'
+--UNION SELECT 7554,'Sent','Sent'
+--UNION SELECT 7556,'Ramosch','Ramosch'
+--UNION SELECT 7558,'Strada','Strada'
+--UNION SELECT 7559,'Tschlin','Tschlin'
+--UNION SELECT 7560,'Martina','Martina'
+--UNION SELECT 7562,'Samnaun-Compatsch','Samnaun-Compatsch'
+--UNION SELECT 7563,'Samnaun Dorf','Samnaun Dorf'
+--UNION SELECT 7602,'Casaccia','Casaccia'
+--UNION SELECT 7603,'Vicosoprano','Vicosoprano'
+--UNION SELECT 7604,'Borgonovo','Borgonovo'
+--UNION SELECT 7605,'Stampa','Stampa'
+--UNION SELECT 7606,'Promontogno','Promontogno'
+--UNION SELECT 7610,'Soglio','Soglio'
+--UNION SELECT 7608,'Castasegna','Castasegna'
+--UNION SELECT 7742,'Poschiavo','Poschiavo'
+--UNION SELECT 7743,'Brusio','Brusio'
+--UNION SELECT 7747,'Viano','Viano'
+--UNION SELECT 7744,'Campocologno','Campocologno'
+--UNION SELECT 7710,'Ospizio Bernina','Ospizio Bernina'
+--UNION SELECT 7741,'S. Carlo GR','S. Carlo Poschiavo'
+--UNION SELECT 7745,'Li Curt','Li Curt'
+--UNION SELECT 7746,'Le Prese','Le Prese'
+--UNION SELECT 7748,'Campascio','Campascio'
+--UNION SELECT 8102,'Oberengstringen','Oberengstringen'
+--UNION SELECT 8103,'Unterengstringen','Unterengstringen'
+--UNION SELECT 8104,'Weiningen ZH','Weiningen ZH'
+--UNION SELECT 8105,'Regensdorf','Regensdorf'
+--UNION SELECT 8105,'Watt','Watt'
+--UNION SELECT 8107,'Buchs ZH','Buchs ZH'
+--UNION SELECT 8112,'Otelfingen','Otelfingen'
+--UNION SELECT 8113,'Boppelsen','Boppelsen'
+--UNION SELECT 8121,'Benglen','Benglen'
+--UNION SELECT 8122,'Binz','Binz'
+--UNION SELECT 8123,'Ebmatingen','Ebmatingen'
+--UNION SELECT 8124,'Maur','Maur'
+--UNION SELECT 8125,'Zollikerberg','Zollikerberg'
+--UNION SELECT 8126,'Zumikon','Zumikon'
+--UNION SELECT 8127,'Forch','Forch'
+--UNION SELECT 8132,'Hinteregg','Hinteregg'
+--UNION SELECT 8133,'Esslingen','Esslingen'
+--UNION SELECT 8134,'Adliswil','Adliswil'
+--UNION SELECT 8134,'Adliswil 1','Adliswil 1'
+--UNION SELECT 8134,'Adliswil Sood','Adliswil Sood'
+--UNION SELECT 8135,'Langnau am Albis','Langnau am Albis'
+--UNION SELECT 8136,'Gattikon','Gattikon'
+--UNION SELECT 8143,'Uetliberg','Uetliberg'
+--UNION SELECT 8142,'Uitikon Waldegg','Uitikon Waldegg'
+--UNION SELECT 8143,'Stallikon','Stallikon'
+--UNION SELECT 8152,'Glattbrugg','Glattbrugg'
+--UNION SELECT 8152,'Opfikon','Opfikon'
+--UNION SELECT 8154,'Oberglatt ZH','Oberglatt ZH'
+--UNION SELECT 8155,'Niederhasli','Niederhasli'
+--UNION SELECT 8156,'Oberhasli','Oberhasli'
+--UNION SELECT 8157,'Dielsdorf','Dielsdorf'
+--UNION SELECT 8158,'Regensberg','Regensberg'
+--UNION SELECT 8162,'Steinmaur','Steinmaur'
+--UNION SELECT 8164,'Bachs','Bachs'
+--UNION SELECT 8166,'Niederweningen','Niederweningen'
+--UNION SELECT 8172,'Niederglatt ZH','Niederglatt ZH'
+--UNION SELECT 8173,'Neerach','Neerach'
+--UNION SELECT 8174,'Stadel','Stadel b. Niederglatt'
+--UNION SELECT 8175,'Windlach','Windlach'
+--UNION SELECT 8182,'Hochfelden','Hochfelden'
+--UNION SELECT 8185,'Winkel','Winkel'
+--UNION SELECT 8192,'Glattfelden','Glattfelden'
+--UNION SELECT 8193,'Eglisau','Eglisau'
+--UNION SELECT 8195,'Wasterkingen','Wasterkingen'
+--UNION SELECT 8196,'Wil ZH','Wil ZH'
+--UNION SELECT 8197,'Rafz','Rafz'
+--UNION SELECT 8200,'Schaffhausen','Schaffhausen'
+--UNION SELECT 8200,'Schaffhausen 1','Schaffhausen 1'
+--UNION SELECT 8200,'Schaffh 1 Zust','Schaffhausen 1 Zust'
+--UNION SELECT 8200,'Schaffhausen','Schaffhausen'
+--UNION SELECT 8200,'Schaffhausen','Schaffhausen'
+--UNION SELECT 8200,'Schaffhausen','Schaffhausen'
+--UNION SELECT 8200,'Schaffh. Breite','Schaffhausen Breite'
+--UNION SELECT 8200,'Schaffhausen','Schaffhausen'
+--UNION SELECT 8200,'Schaffhausen','Schaffhausen'
+--UNION SELECT 8219,'Trasadingen','Trasadingen'
+--UNION SELECT 8228,'Beggingen','Beggingen'
+--UNION SELECT 8231,'Hemmental','Hemmental'
+--UNION SELECT 8234,'Stetten SH','Stetten SH'
+--UNION SELECT 8235,'Lohn SH','Lohn SH'
+--UNION SELECT 8236,'Opfertshofen SH','Opfertshofen SH'
+--UNION SELECT 8242,'Bibern SH','Bibern SH'
+--UNION SELECT 8242,'Hofen SH','Hofen SH'
+--UNION SELECT 8243,'Altdorf SH','Altdorf SH'
+--UNION SELECT 8212,'Neuhausen','Neuhausen am Rheinfall'
+--UNION SELECT 8212,'Neuhausen 1','Neuhausen am Rheinfall 1'
+--UNION SELECT 8213,'Neunkirch','Neunkirch'
+--UNION SELECT 8215,'Hallau','Hallau'
+--UNION SELECT 8216,'Oberhallau','Oberhallau'
+--UNION SELECT 8217,'Wilchingen','Wilchingen'
+--UNION SELECT 8218,'Osterfingen','Osterfingen'
+--UNION SELECT 8222,'Beringen','Beringen'
+--UNION SELECT 8223,'Guntmadingen','Guntmadingen'
+--UNION SELECT 8225,'Siblingen','Siblingen'
+--UNION SELECT 8226,'Schleitheim','Schleitheim'
+--UNION SELECT 8232,'Merishausen','Merishausen'
+--UNION SELECT 8233,'Bargen SH','Bargen SH'
+--UNION SELECT 8240,'Thayngen','Thayngen'
+--UNION SELECT 8241,'Barzheim','Barzheim'
+--UNION SELECT 8245,'Feuerthalen','Feuerthalen'
+--UNION SELECT 8246,'Langwiesen','Langwiesen'
+--UNION SELECT 8247,'Flurlingen','Flurlingen'
+--UNION SELECT 8252,'Schlatt TG','Schlatt TG'
+--UNION SELECT 8254,'Basadingen','Basadingen'
+--UNION SELECT 8259,'Kaltenbach','Kaltenbach'
+--UNION SELECT 8253,'Diessenhofen','Diessenhofen'
+--UNION SELECT 8255,'Schlattingen','Schlattingen'
+--UNION SELECT 8259,'Etzwilen','Etzwilen'
+--UNION SELECT 8260,'Stein am Rhein','Stein am Rhein'
+--UNION SELECT 8259,'Wagenhausen','Wagenhausen'
+--UNION SELECT 8261,'Hemishofen','Hemishofen'
+--UNION SELECT 8262,'Ramsen','Ramsen'
+--UNION SELECT 8263,'Buch SH','Buch SH'
+--UNION SELECT 8264,'Eschenz','Eschenz'
+--UNION SELECT 8265,'Mammern','Mammern'
+--UNION SELECT 8266,'Steckborn','Steckborn'
+--UNION SELECT 8267,'Berlingen','Berlingen'
+--UNION SELECT 8268,'Mannenbach-Salenst','Mannenbach-Salenstein'
+--UNION SELECT 8272,'Ermatingen','Ermatingen'
+--UNION SELECT 8273,'Triboltingen','Triboltingen'
+--UNION SELECT 8280,'Kreuzlingen','Kreuzlingen'
+--UNION SELECT 8280,'Kreuzlingen 1','Kreuzlingen 1'
+--UNION SELECT 8280,'Kreuzlingen ceha!','Kreuzlingen ceha!'
+--UNION SELECT 8280,'Kreuzlingen 3','Kreuzlingen 3'
+--UNION SELECT 8301,'Glattzentrum','Glattzentrum b. Wallisellen'
+--UNION SELECT 8302,'Kloten','Kloten'
+--UNION SELECT 8303,'Bassersdorf','Bassersdorf'
+--UNION SELECT 8304,'Wallisellen','Wallisellen'
+--UNION SELECT 8305,'Dietlikon','Dietlikon'
+--UNION SELECT 8307,'Effretikon','Effretikon'
+--UNION SELECT 8315,'Lindau','Lindau'
+--UNION SELECT 8308,'Illnau','Illnau'
+--UNION SELECT 8308,'Agasul','Agasul'
+--UNION SELECT 8310,'Kemptthal','Kemptthal'
+--UNION SELECT 8312,'Winterberg ZH','Winterberg ZH'
+--UNION SELECT 8307,'Ottikon b.Kemptth.','Ottikon b. Kemptthal'
+--UNION SELECT 8314,'Kyburg','Kyburg'
+--UNION SELECT 8320,'Fehraltorf','Fehraltorf'
+--UNION SELECT 8489,'Wildberg','Wildberg'
+--UNION SELECT 8322,'Madetswil','Madetswil'
+--UNION SELECT 8331,'Auslikon','Auslikon'
+--UNION SELECT 8332,'Russikon','Russikon'
+--UNION SELECT 8335,'Hittnau','Hittnau'
+--UNION SELECT 8340,'Hinwil','Hinwil'
+--UNION SELECT 8342,'Wernetshausen','Wernetshausen'
+--UNION SELECT 8345,'Adetswil','Adetswil'
+--UNION SELECT 8352,'Elsau','Elsau'
+--UNION SELECT 8353,'Elgg','Elgg'
+--UNION SELECT 8354,'Hofstetten ZH','Hofstetten ZH'
+--UNION SELECT 8355,'Aadorf','Aadorf'
+--UNION SELECT 8356,'Ettenhausen TG','Ettenhausen TG'
+--UNION SELECT 8357,'Guntershausen','Guntershausen b. Aadorf'
+--UNION SELECT 8360,'Eschlikon TG','Eschlikon TG'
+--UNION SELECT 8362,'Balterswil','Balterswil'
+--UNION SELECT 8363,'Bichelsee','Bichelsee'
+--UNION SELECT 8370,'Sirnach','Sirnach'
+--UNION SELECT 8372,'Wiezikon b.Sirnach','Wiezikon b. Sirnach'
+--UNION SELECT 8374,'Oberwangen TG','Oberwangen TG'
+--UNION SELECT 8374,'Dussnang','Dussnang'
+--UNION SELECT 8376,'Fischingen','Fischingen'
+--UNION SELECT 8376,'Au TG','Au TG'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8400,'Winterthur 1 Ann.','Winterthur 1 Annahme'
+--UNION SELECT 8400,'Winterthur Zust','Winterthur Zustellung'
+--UNION SELECT 8400,'Winterthur Kaserne','Winterthur Kaserne'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8400,'Winterthur','Winterthur'
+--UNION SELECT 8412,'Aesch Neftenbach','Aesch Neftenbach'
+--UNION SELECT 8413,'Neftenbach','Neftenbach'
+--UNION SELECT 8414,'Buch am Irchel','Buch am Irchel'
+--UNION SELECT 8415,'Berg am Irchel','Berg am Irchel'
+--UNION SELECT 8416,'Flaach','Flaach'
+--UNION SELECT 8418,'Schlatt ZH','Schlatt ZH'
+--UNION SELECT 8422,'Pfungen','Pfungen'
+--UNION SELECT 8424,'Embrach','Embrach'
+--UNION SELECT 8425,'Oberembrach','Oberembrach'
+--UNION SELECT 8426,'Lufingen','Lufingen'
+--UNION SELECT 8428,'Teufen ZH','Teufen ZH'
+--UNION SELECT 8192,'Zweidlen','Zweidlen'
+--UNION SELECT 8187,'Weiach','Weiach'
+--UNION SELECT 5466,'Kaiserstuhl AG','Kaiserstuhl AG'
+--UNION SELECT 5467,'Fisibach','Fisibach'
+--UNION SELECT 5332,'Rekingen AG','Rekingen AG'
+--UNION SELECT 5330,'Bad Zurzach','Bad Zurzach'
+--UNION SELECT 5323,'Rietheim','Rietheim'
+--UNION SELECT 5465,'Mellikon','Mellikon'
+--UNION SELECT 5463,'Wislikofen','Wislikofen'
+--UNION SELECT 5462,'Siglistorf','Siglistorf'
+--UNION SELECT 5333,'Baldingen','Baldingen'
+--UNION SELECT 8442,'Hettlingen','Hettlingen'
+--UNION SELECT 8444,'Henggart','Henggart'
+--UNION SELECT 8447,'Dachsen','Dachsen'
+--UNION SELECT 8248,'Uhwiesen','Uhwiesen'
+--UNION SELECT 8450,'Andelfingen','Andelfingen'
+--UNION SELECT 8453,'Alten','Alten'
+--UNION SELECT 8451,'Kleinandelfingen','Kleinandelfingen'
+--UNION SELECT 8452,'Adlikon','Adlikon b. Andelfingen'
+--UNION SELECT 8457,'Humlikon','Humlikon'
+--UNION SELECT 8458,'Dorf','Dorf'
+--UNION SELECT 8459,'Volken','Volken'
+--UNION SELECT 8454,'Buchberg','Buchberg'
+--UNION SELECT 8460,'Marthalen','Marthalen'
+--UNION SELECT 8464,'Ellikon am Rhein','Ellikon am Rhein'
+--UNION SELECT 8461,'Oerlingen','Oerlingen'
+--UNION SELECT 8465,'Rudolfingen','Rudolfingen'
+--UNION SELECT 8462,'Rheinau','Rheinau'
+--UNION SELECT 8463,'Benken ZH','Benken ZH'
+--UNION SELECT 8472,'Seuzach','Seuzach'
+--UNION SELECT 8400,'Reutlingen','Reutlingen Winterthur'
+--UNION SELECT 8474,'Dinhard','Dinhard'
+--UNION SELECT 8475,'Ossingen','Ossingen'
+--UNION SELECT 8476,'Unterstammheim','Unterstammheim'
+--UNION SELECT 8477,'Oberstammheim','Oberstammheim'
+--UNION SELECT 8478,'Thalheim','Thalheim an der Thur'
+--UNION SELECT 8479,'Altikon','Altikon'
+--UNION SELECT 8467,'Truttikon','Truttikon'
+--UNION SELECT 8468,'Guntalingen','Guntalingen'
+--UNION SELECT 8468,'Waltalingen','Waltalingen'
+--UNION SELECT 8482,'Sennhof','Sennhof Winterthur'
+--UNION SELECT 8483,'Kollbrunn','Kollbrunn'
+--UNION SELECT 8484,'Weisslingen','Weisslingen'
+--UNION SELECT 8484,'Neschwil','Neschwil'
+--UNION SELECT 8484,'Theilingen','Theilingen'
+--UNION SELECT 8487,'Zell ZH','Zell ZH'
+--UNION SELECT 8488,'Turbenthal','Turbenthal'
+--UNION SELECT 8492,'Wila','Wila'
+--UNION SELECT 8493,'Saland','Saland'
+--UNION SELECT 8494,'Bauma','Bauma'
+--UNION SELECT 8497,'Fischenthal','Fischenthal'
+--UNION SELECT 8498,'Gibswil','Gibswil'
+--UNION SELECT 8499,'Sternenberg','Sternenberg'
+--UNION SELECT 8500,'Frauenfeld','Frauenfeld'
+--UNION SELECT 8500,'Frauenfeld 1','Frauenfeld 1'
+--UNION SELECT 8500,'Gerlikon','Gerlikon'
+--UNION SELECT 8500,'Frauenfeld 1 Zust','Frauenfeld 1 Zustellung'
+--UNION SELECT 8500,'Frauenfeld','Frauenfeld'
+--UNION SELECT 8500,'Frauenfeld Talbach','Frauenfeld Talbach'
+--UNION SELECT 8500,'Frauenfeld Kurzdor','Frauenfeld Kurzdorf'
+--UNION SELECT 8505,'Pfyn','Pfyn'
+--UNION SELECT 8506,'Lanzenneunforn','Lanzenneunforn'
+--UNION SELECT 8508,'Homburg','Homburg'
+--UNION SELECT 8512,'Thundorf','Thundorf'
+--UNION SELECT 8512,'Lustdorf','Lustdorf'
+--UNION SELECT 8514,'Amlikon-Bissegg','Amlikon-Bissegg'
+--UNION SELECT 8523,'Hagenbuch ZH','Hagenbuch ZH'
+--UNION SELECT 8524,'Uesslingen','Uesslingen'
+--UNION SELECT 8525,'Niederneunforn','Niederneunforn'
+--UNION SELECT 8526,'Oberneunforn','Oberneunforn'
+--UNION SELECT 8532,'Warth','Warth'
+--UNION SELECT 8524,'Buch b. Frauenfeld','Buch b. Frauenfeld'
+--UNION SELECT 8532,'Weiningen TG','Weiningen TG'
+--UNION SELECT 8535,'Herdern','Herdern'
+--UNION SELECT 8537,'Nussbaumen TG','Nussbaumen TG'
+--UNION SELECT 8542,'Wiesendangen','Wiesendangen'
+--UNION SELECT 8400,'StadelWinterthur','Stadel Winterthur'
+--UNION SELECT 8545,'Rickenbach ZH','Rickenbach ZH'
+--UNION SELECT 8544,'Attikon','Attikon'
+--UNION SELECT 8546,'Islikon','Islikon'
+--UNION SELECT 8547,'Gachnang','Gachnang'
+--UNION SELECT 8548,'Ellikon a d Thur','Ellikon an der Thur'
+--UNION SELECT 8552,'Felben-Wellhausen','Felben-Wellhausen'
+--UNION SELECT 8554,'Bonau','Bonau'
+--UNION SELECT 8556,'Wigoltingen','Wigoltingen'
+--UNION SELECT 8564,'Lipperswil','Lipperswil'
+--UNION SELECT 8558,'Raperswilen','Raperswilen'
+--UNION SELECT 8269,'Fruthwilen','Fruthwilen'
+--UNION SELECT 8561,'Ottoberg','Ottoberg'
+--UNION SELECT 8565,'Hugelshofen','Hugelshofen'
+--UNION SELECT 8566,'Dotnacht','Dotnacht'
+--UNION SELECT 8566,'Neuwilen','Neuwilen'
+--UNION SELECT 8564,'Engwilen','Engwilen'
+--UNION SELECT 8570,'Weinfelden','Weinfelden'
+--UNION SELECT 8572,'Berg TG','Berg TG'
+--UNION SELECT 8573,'Siegershausen','Siegershausen'
+--UNION SELECT 8574,'Illighausen','Illighausen'
+--UNION SELECT 8576,'Mauren TG','Mauren TG'
+--UNION SELECT 9217,'Neukirch a.d. Thur','Neukirch an der Thur'
+--UNION SELECT 8580,'Amriswil','Amriswil'
+--UNION SELECT 8580,'Sommeri','Sommeri'
+--UNION SELECT 8582,'Dozwil','Dozwil'
+--UNION SELECT 8580,'Hagenwil','Hagenwil b. Amriswil'
+--UNION SELECT 8581,'Schocherswil','Schocherswil'
+--UNION SELECT 8588,'Zihlschlacht','Zihlschlacht'
+--UNION SELECT 8589,'Sitterdorf','Sitterdorf'
+--UNION SELECT 8583,'Sulgen','Sulgen'
+--UNION SELECT 8583,'Donzhausen','Donzhausen'
+--UNION SELECT 8584,'Leimbach TG','Leimbach TG'
+--UNION SELECT 8584,'Opfershofen TG','Opfershofen TG'
+--UNION SELECT 8585,'Mattwil','Mattwil'
+--UNION SELECT 8585,'Happerswil','Happerswil'
+--UNION SELECT 8585,'Langrickenbach','Langrickenbach'
+--UNION SELECT 8585,'Zuben','Zuben'
+--UNION SELECT 8586,'Erlen','Erlen'
+--UNION SELECT 8586,'Andwil TG','Andwil TG'
+--UNION SELECT 8586,'Riedt b. Erlen','Riedt b. Erlen'
+--UNION SELECT 8587,'Oberaach','Oberaach'
+--UNION SELECT 8590,'Romanshorn','Romanshorn'
+--UNION SELECT 8599,'Salmsach','Salmsach'
+--UNION SELECT 8592,'Uttwil','Uttwil'
+--UNION SELECT 8593,'Kesswil','Kesswil'
+--UNION SELECT 8595,'Altnau','Altnau'
+--UNION SELECT 8596,'Scherzingen','Scherzingen'
+--UNION SELECT 8597,'Landschlacht','Landschlacht'
+--UNION SELECT 8598,'Bottighofen','Bottighofen'
+--UNION SELECT 8603,'Schwerzenbach','Schwerzenbach'
+--UNION SELECT 8604,'Volketswil','Volketswil'
+--UNION SELECT 8605,'Gutenswil','Gutenswil'
+--UNION SELECT 8606,'Greifensee','Greifensee'
+--UNION SELECT 8608,'Bubikon','Bubikon'
+--UNION SELECT 8610,'Uster','Uster'
+--UNION SELECT 8610,'Uster 1','Uster 1'
+--UNION SELECT 8610,'Uster Niederuster','Uster Niederuster'
+--UNION SELECT 8610,'Uster Nossikon','Uster Nossikon'
+--UNION SELECT 8614,'Bertschikon Gossau','Bertschikon Gossau ZH'
+--UNION SELECT 8615,'Wermatswil','Wermatswil'
+--UNION SELECT 8616,'Riedikon','Riedikon'
+--UNION SELECT 8618,'Oetwil am See','Oetwil am See'
+--UNION SELECT 8620,'Wetzikon ZH','Wetzikon ZH'
+--UNION SELECT 8620,'Wetzikon ZH 1','Wetzikon ZH 1'
+--UNION SELECT 8620,'Wetzikon ZH Roben.','Wetzikon ZH Robenhausen'
+--UNION SELECT 8620,'Wetzikon ZH','Wetzikon ZH'
+--UNION SELECT 8620,'Wetzikon ZH','Wetzikon ZH'
+--UNION SELECT 8625,'Gossau ZH','Gossau ZH'
+--UNION SELECT 8626,'Ottikon','Ottikon Gossau ZH'
+--UNION SELECT 8632,'Tann','Tann'
+--UNION SELECT 8633,'Wolfhausen','Wolfhausen'
+--UNION SELECT 8634,'Hombrechtikon','Hombrechtikon'
+--UNION SELECT 8636,'Wald ZH','Wald ZH'
+--UNION SELECT 8639,'Faltigberg','Faltigberg'
+--UNION SELECT 8637,'Laupen ZH','Laupen ZH'
+--UNION SELECT 8638,'Goldingen','Goldingen'
+--UNION SELECT 8640,'Rapperswil SG','Rapperswil SG'
+--UNION SELECT 8640,'Kempraten','Kempraten'
+--UNION SELECT 8640,'Rapperswil SG Zust','Rapperswil SG Zustellung'
+--UNION SELECT 8645,'Jona','Jona'
+--UNION SELECT 8646,'Wagen','Wagen'
+--UNION SELECT 8702,'Zollikon','Zollikon'
+--UNION SELECT 8702,'Zollikon Dorf','Zollikon Dorf'
+--UNION SELECT 8703,'Erlenbach ZH','Erlenbach ZH'
+--UNION SELECT 8704,'Herrliberg','Herrliberg'
+--UNION SELECT 8706,'Meilen','Meilen'
+--UNION SELECT 8707,'Uetikon am See','Uetikon am See'
+--UNION SELECT 8713,'Uerikon','Uerikon'
+--UNION SELECT 8714,'Feldbach','Feldbach'
+--UNION SELECT 8715,'Bollingen','Bollingen'
+--UNION SELECT 8716,'Schmerikon','Schmerikon'
+--UNION SELECT 8717,'Benken SG','Benken SG'
+--UNION SELECT 8722,'Kaltbrunn','Kaltbrunn'
+--UNION SELECT 8723,'Rufi','Rufi'
+--UNION SELECT 8725,'Ernetschwil','Ernetschwil'
+--UNION SELECT 8726,'Ricken SG','Ricken SG'
+--UNION SELECT 8727,'Walde SG','Walde SG'
+--UNION SELECT 8730,'Uznach','Uznach'
+--UNION SELECT 8732,'Neuhaus SG','Neuhaus SG'
+--UNION SELECT 8733,'Eschenbach SG','Eschenbach SG'
+--UNION SELECT 8734,'Ermenswil','Ermenswil'
+--UNION SELECT 8735,'St. Gallenkappel','St. Gallenkappel'
+--UNION SELECT 8737,'Gommiswald','Gommiswald'
+--UNION SELECT 8738,'Uetliburg SG','Uetliburg SG'
+--UNION SELECT 8739,'Rieden SG','Rieden SG'
+--UNION SELECT 8750,'Glarus','Glarus'
+--UNION SELECT 8750,'Riedern','Riedern'
+--UNION SELECT 8751,'Urnerboden','Urnerboden'
+--UNION SELECT 8753,'Mollis','Mollis'
+--UNION SELECT 8754,'Netstal','Netstal'
+--UNION SELECT 8755,'Ennenda','Ennenda'
+--UNION SELECT 8762,'Schwanden GL','Schwanden GL'
+--UNION SELECT 8762,'Sool','Sool'
+--UNION SELECT 8765,'Engi','Engi'
+--UNION SELECT 8766,'Matt','Matt'
+--UNION SELECT 8767,'Elm','Elm'
+--UNION SELECT 8772,'Nidfurn','Nidfurn'
+--UNION SELECT 8773,'Haslen GL','Haslen GL'
+--UNION SELECT 8775,'Luchsingen','Luchsingen'
+--UNION SELECT 8777,'Diesbach GL','Diesbach GL'
+--UNION SELECT 8783,'Linthal','Linthal'
+--UNION SELECT 8784,'Braunwald','Braunwald'
+--UNION SELECT 8800,'Thalwil','Thalwil'
+--UNION SELECT 8802,'Kilchberg ZH','Kilchberg ZH'
+--UNION SELECT 8804,'Au ZH','Au ZH'
+--UNION SELECT 8805,'Richterswil','Richterswil'
+--UNION SELECT 8805,'Richterswil Burghd','Richterswil Burghalden SOB'
+--UNION SELECT 8807,'Freienbach','Freienbach'
+--UNION SELECT 8810,'Horgen','Horgen'
+--UNION SELECT 8810,'Horgen 1','Horgen 1'
+--UNION SELECT 8810,'Horgen','Horgen'
+--UNION SELECT 8815,'Horgenberg','Horgenberg'
+--UNION SELECT 8816,'Hirzel','Hirzel'
+--UNION SELECT 8832,'Wollerau','Wollerau'
+--UNION SELECT 8833,'Samstagern','Samstagern'
+--UNION SELECT 8834,'Schindellegi','Schindellegi'
+--UNION SELECT 8835,'Feusisberg','Feusisberg'
+--UNION SELECT 8836,'Bennau','Bennau'
+--UNION SELECT 8840,'Einsiedeln','Einsiedeln'
+--UNION SELECT 8840,'Trachslau','Trachslau'
+--UNION SELECT 8849,'Alpthal','Alpthal'
+--UNION SELECT 8846,'Willerzell','Willerzell'
+--UNION SELECT 8847,'Egg SZ','Egg SZ'
+--UNION SELECT 8841,'Gross','Gross'
+--UNION SELECT 8844,'Euthal','Euthal'
+--UNION SELECT 8845,'Studen SZ','Studen SZ'
+--UNION SELECT 8842,'Unteriberg','Unteriberg'
+--UNION SELECT 8843,'Oberiberg','Oberiberg'
+--UNION SELECT 8852,'Altendorf','Altendorf'
+--UNION SELECT 8853,'Lachen SZ','Lachen SZ'
+--UNION SELECT 8854,'Siebnen','Siebnen'
+--UNION SELECT 8854,'Galgenen','Galgenen'
+--UNION SELECT 8855,'Wangen SZ','Wangen SZ'
+--UNION SELECT 8856,'Tuggen','Tuggen'
+--UNION SELECT 8857,'Vorderthal','Vorderthal'
+--UNION SELECT 8858,'Innerthal','Innerthal'
+--UNION SELECT 8863,'Buttikon SZ','Buttikon SZ'
+--UNION SELECT 8864,'Reichenburg','Reichenburg'
+--UNION SELECT 8865,'Bilten','Bilten'
+--UNION SELECT 8867,'Niederurnen','Niederurnen'
+--UNION SELECT 8868,'Oberurnen','Oberurnen'
+--UNION SELECT 8872,'Weesen','Weesen'
+--UNION SELECT 8873,'Amden','Amden'
+--UNION SELECT 8758,'Obstalden','Obstalden'
+--UNION SELECT 8757,'Filzbach','Filzbach'
+--UNION SELECT 8877,'Murg','Murg'
+--UNION SELECT 8878,'Quinten','Quinten'
+--UNION SELECT 8880,'Walenstadt','Walenstadt'
+--UNION SELECT 8881,'Walenstadtberg','Walenstadtberg'
+--UNION SELECT 8881,'Tscherlach','Tscherlach'
+--UNION SELECT 8882,'Unterterzen','Unterterzen'
+--UNION SELECT 8883,'Quarten','Quarten'
+--UNION SELECT 8884,'Oberterzen','Oberterzen'
+--UNION SELECT 8885,'Mols','Mols'
+--UNION SELECT 8887,'Mels','Mels'
+--UNION SELECT 8889,'Plons','Plons'
+--UNION SELECT 8888,'Heiligkreuz Mels','Heiligkreuz Mels'
+--UNION SELECT 8890,'Flums','Flums'
+--UNION SELECT 8892,'Berschis','Berschis'
+--UNION SELECT 8893,'Flums Hochwiese','Flums Hochwiese'
+--UNION SELECT 8894,'Flumserberg Saxli','Flumserberg Saxli'
+--UNION SELECT 8895,'Flumserberg Portel','Flumserberg Portels'
+--UNION SELECT 8896,'Flumserberg Bergh','Flumserberg Bergheim'
+--UNION SELECT 8897,'Flumserberg Theim','Flumserberg Tannenheim'
+--UNION SELECT 8898,'Flumserberg Tboden','Flumserberg Tannenbodenalp'
+--UNION SELECT 8902,'Urdorf','Urdorf'
+--UNION SELECT 8903,'Birmensdorf ZH','Birmensdorf ZH'
+--UNION SELECT 8904,'Aesch ZH','Aesch ZH'
+--UNION SELECT 8905,'Arni-Islisberg','Arni-Islisberg'
+--UNION SELECT 8906,'Bonstetten','Bonstetten'
+--UNION SELECT 8907,'Wettswil','Wettswil'
+--UNION SELECT 8908,'Hedingen','Hedingen'
+--UNION SELECT 8910,'Affoltern am Albis','Affoltern am Albis'
+--UNION SELECT 8909,'Zwillikon','Zwillikon'
+--UNION SELECT 8911,'Rifferswil','Rifferswil'
+--UNION SELECT 8912,'Obfelden','Obfelden'
+--UNION SELECT 8913,'Ottenbach','Ottenbach'
+--UNION SELECT 8914,'Aeugst am Albis','Aeugst am Albis'
+--UNION SELECT 8914,'Aeugstertal','Aeugstertal'
+--UNION SELECT 8915,'Hausen am Albis','Hausen am Albis'
+--UNION SELECT 8916,'Jonen','Jonen'
+--UNION SELECT 8917,'Oberlunkhofen','Oberlunkhofen'
+--UNION SELECT 8918,'Unterlunkhofen','Unterlunkhofen'
+--UNION SELECT 8919,'Rottenschwil','Rottenschwil'
+--UNION SELECT 8925,'Ebertswil','Ebertswil'
+--UNION SELECT 8926,'Kappel am Albis','Kappel am Albis'
+--UNION SELECT 8932,'Mettmenstetten','Mettmenstetten'
+--UNION SELECT 8933,'Maschwanden','Maschwanden'
+--UNION SELECT 8934,'Knonau','Knonau'
+--UNION SELECT 8942,'Oberrieden','Oberrieden'
+--UNION SELECT 8135,'Sihlbrugg Station','Sihlbrugg Station'
+--UNION SELECT 6340,'Sihlbrugg','Sihlbrugg'
+--UNION SELECT 8951,'Fahrweid','Fahrweid'
+--UNION SELECT 8952,'Schlieren','Schlieren'
+--UNION SELECT 8953,'Dietikon','Dietikon'
+--UNION SELECT 8953,'Dietikon 1','Dietikon 1'
+--UNION SELECT 8953,'Dietikon Glanzenb.','Dietikon Glanzenberg'
+--UNION SELECT 8954,'Geroldswil','Geroldswil'
+--UNION SELECT 8955,'Oetwil a.d. Limmat','Oetwil an der Limmat'
+--UNION SELECT 8956,'Killwangen','Killwangen'
+--UNION SELECT 8957,'Spreitenbach','Spreitenbach'
+--UNION SELECT 8962,'Bergdietikon','Bergdietikon'
+--UNION SELECT 8964,'Rudolfstetten','Rudolfstetten'
+--UNION SELECT 8965,'Berikon','Berikon'
+--UNION SELECT 8966,'Oberwil-Lieli','Oberwil-Lieli'
+--UNION SELECT 8967,'Widen','Widen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen 1 Ann.','St. Gallen 1 Annahme'
+--UNION SELECT 9000,'St. Gallen Dist Ba','St. Gallen Dist Ba'
+--UNION SELECT 9000,'St. Gallen Kaserne','St. Gallen Kaserne'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen Lachen','St. Gallen Lachen-Vonwil'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9030,'Abtwil SG','Abtwil SG'
+--UNION SELECT 9032,'Engelburg','Engelburg'
+--UNION SELECT 9033,'Untereggen','Untereggen'
+--UNION SELECT 9034,'Eggersriet','Eggersriet'
+--UNION SELECT 9035,'Grub AR','Grub AR'
+--UNION SELECT 9036,'Grub SG','Grub SG'
+--UNION SELECT 9037,'Speicherschwendi','Speicherschwendi'
+--UNION SELECT 9038,'Rehetobel','Rehetobel'
+--UNION SELECT 9042,'Speicher','Speicher'
+--UNION SELECT 9043,'Trogen','Trogen'
+--UNION SELECT 9044,'Wald AR','Wald AR'
+--UNION SELECT 9050,'Appenzell','Appenzell'
+--UNION SELECT 9052,'Niederteufen','Niederteufen'
+--UNION SELECT 9053,'Teufen AR','Teufen AR'
+--UNION SELECT 9054,'Haslen AI','Haslen AI'
+--UNION SELECT 9056,'Gais','Gais'
+--UNION SELECT 9057,'Weissbad','Weissbad'
+--UNION SELECT 9063,'Stein AR','Stein AR'
+--UNION SELECT 9064,'Hundwil','Hundwil'
+--UNION SELECT 9100,'Herisau','Herisau'
+--UNION SELECT 9100,'Herisau 1','Herisau 1'
+--UNION SELECT 9100,'Herisau','Herisau'
+--UNION SELECT 9103,'Schwellbrunn','Schwellbrunn'
+--UNION SELECT 9104,'Waldstatt','Waldstatt'
+--UNION SELECT 9108,'Gonten','Gonten'
+--UNION SELECT 9112,'Schachen b.Herisau','Schachen b. Herisau'
+--UNION SELECT 9113,'Degersheim','Degersheim'
+--UNION SELECT 9114,'Hoffeld','Hoffeld'
+--UNION SELECT 9115,'Dicken','Dicken'
+--UNION SELECT 9116,'Wolfertswil','Wolfertswil'
+--UNION SELECT 9122,'Mogelsberg','Mogelsberg'
+--UNION SELECT 9123,'Nassen','Nassen'
+--UNION SELECT 9125,'Brunnadern','Brunnadern'
+--UNION SELECT 9126,'Necker','Necker'
+--UNION SELECT 9127,'St. Peterzell','St. Peterzell'
+--UNION SELECT 9200,'Gossau SG','Gossau SG'
+--UNION SELECT 9200,'Gossau SG 1','Gossau SG 1'
+--UNION SELECT 9200,'Gossau SG Mettend.','Gossau SG Mettendorf'
+--UNION SELECT 9203,'Niederwil SG','Niederwil SG'
+--UNION SELECT 9204,'Andwil SG','Andwil SG'
+--UNION SELECT 9205,'Waldkirch','Waldkirch'
+--UNION SELECT 9212,'Arnegg','Arnegg'
+--UNION SELECT 9213,'Hauptwil','Hauptwil'
+--UNION SELECT 9216,'Heldswil','Heldswil'
+--UNION SELECT 9215,'Buhwil','Buhwil'
+--UNION SELECT 9220,'Bischofszell','Bischofszell'
+--UNION SELECT 9223,'Schweizersholz','Schweizersholz'
+--UNION SELECT 9223,'Halden','Halden'
+--UNION SELECT 9216,'Hohentannen','Hohentannen'
+--UNION SELECT 9225,'Wilen Gottshaus','Wilen Gottshaus'
+--UNION SELECT 9225,'St. Pelagiberg','St. Pelagiberg'
+--UNION SELECT 9230,'Flawil','Flawil'
+--UNION SELECT 9230,'Flawil 1','Flawil 1'
+--UNION SELECT 9230,'Flawil 2','Flawil 2 Botsberg'
+--UNION SELECT 9231,'Egg Flawil','Egg Flawil'
+--UNION SELECT 9604,'Oberrindal','Oberrindal'
+--UNION SELECT 9240,'Uzwil','Uzwil'
+--UNION SELECT 9240,'Niederglatt SG','Niederglatt SG'
+--UNION SELECT 9242,'Oberuzwil','Oberuzwil'
+--UNION SELECT 9248,'Bichwil','Bichwil'
+--UNION SELECT 9243,'Jonschwil','Jonschwil'
+--UNION SELECT 9244,'Niederuzwil','Niederuzwil'
+--UNION SELECT 9247,'Henau','Henau'
+--UNION SELECT 9249,'Algetshausen','Algetshausen'
+--UNION SELECT 9300,'Wittenbach','Wittenbach'
+--UNION SELECT 9304,'Bernhardzell','Bernhardzell'
+--UNION SELECT 9305,'Berg SG','Berg SG'
+--UNION SELECT 9306,'Freidorf TG','Freidorf TG'
+--UNION SELECT 9315,'Winden','Winden'
+--UNION SELECT 9313,'Muolen','Muolen'
+--UNION SELECT 9314,'Steinebrunn','Steinebrunn'
+--UNION SELECT 9315,'Neukirch Egnach','Neukirch Egnach'
+--UNION SELECT 9320,'Arbon','Arbon'
+--UNION SELECT 9320,'Frasnacht','Frasnacht'
+--UNION SELECT 9320,'Stachen','Stachen'
+--UNION SELECT 9322,'Egnach','Egnach'
+--UNION SELECT 9323,'Steinach','Steinach'
+--UNION SELECT 9325,'Roggwil TG','Roggwil TG'
+--UNION SELECT 9326,'Horn','Horn'
+--UNION SELECT 9400,'Rorschach','Rorschach'
+--UNION SELECT 9404,'Rorschacherberg','Rorschacherberg'
+--UNION SELECT 9403,'Goldach','Goldach'
+--UNION SELECT 9405,'Wienacht-Tobel','Wienacht-Tobel'
+--UNION SELECT 9410,'Heiden','Heiden'
+--UNION SELECT 9411,'Reute AR','Reute AR'
+--UNION SELECT 9413,'Oberegg','Oberegg'
+--UNION SELECT 9411,'Schachen b. Reute','Schachen b. Reute'
+--UNION SELECT 9422,'Staad SG','Staad SG'
+--UNION SELECT 9423,'Altenrhein','Altenrhein'
+--UNION SELECT 9424,'Rheineck','Rheineck'
+--UNION SELECT 9425,'Thal','Thal'
+--UNION SELECT 9426,'Lutzenberg','Lutzenberg'
+--UNION SELECT 9427,'Wolfhalden','Wolfhalden'
+--UNION SELECT 9428,'Walzenhausen','Walzenhausen'
+--UNION SELECT 9430,'St. Margrethen SG','St. Margrethen SG'
+--UNION SELECT 9428,'Platz','Platz AR'
+--UNION SELECT 9434,'Au SG','Au SG'
+--UNION SELECT 9435,'Heerbrugg','Heerbrugg'
+--UNION SELECT 9436,'Balgach','Balgach'
+--UNION SELECT 9437,'Marbach SG','Marbach SG'
+--UNION SELECT 9442,'Berneck','Berneck'
+--UNION SELECT 9443,'Widnau','Widnau'
+--UNION SELECT 9444,'Diepoldsau','Diepoldsau'
+--UNION SELECT 9445,'Rebstein','Rebstein'
+--UNION SELECT 9451,'Kriessern','Kriessern'
+--UNION SELECT 9452,'Hinterforst','Hinterforst'
+--UNION SELECT 9453,'Eichberg','Eichberg'
+--UNION SELECT 9462,'Montlingen','Montlingen'
+--UNION SELECT 9463,'Oberriet SG','Oberriet SG'
+--UNION SELECT 9464,'Lienz','Lienz'
+--UNION SELECT 9465,'Salez','Salez'
+--UNION SELECT 9466,'Sennwald','Sennwald'
+--UNION SELECT 9468,'Sax','Sax'
+--UNION SELECT 9469,'Haag Rheintal','Haag Rheintal'
+--UNION SELECT 9470,'Buchs SG','Buchs SG'
+--UNION SELECT 9470,'Buchs SG 1','Buchs SG 1'
+--UNION SELECT 9472,'Grabs','Grabs'
+--UNION SELECT 9472,'Grabserberg','Grabserberg'
+--UNION SELECT 9473,'Gams','Gams'
+--UNION SELECT 9475,'Sevelen','Sevelen'
+--UNION SELECT 9476,'Weite','Weite'
+--UNION SELECT 9478,'Azmoos','Azmoos'
+--UNION SELECT 9479,'Oberschan','Oberschan'
+--UNION SELECT 9485,'Nendeln','Nendeln'
+--UNION SELECT 9486,'Schaanwald','Schaanwald'
+--UNION SELECT 9487,'Gamprin-Bendern','Gamprin-Bendern'
+--UNION SELECT 9488,'Schellenberg','Schellenberg'
+--UNION SELECT 9490,'Vaduz','Vaduz'
+--UNION SELECT 9491,'Ruggell','Ruggell'
+--UNION SELECT 9492,'Eschen','Eschen'
+--UNION SELECT 9493,'Mauren FL','Mauren FL'
+--UNION SELECT 9494,'Schaan','Schaan'
+--UNION SELECT 9495,'Triesen','Triesen'
+--UNION SELECT 9496,'Balzers','Balzers'
+--UNION SELECT 9497,'Triesenberg','Triesenberg'
+--UNION SELECT 9500,'Wil SG','Wil SG'
+--UNION SELECT 9500,'Wil SG 1','Wil SG 1'
+--UNION SELECT 9502,'Braunau','Braunau'
+--UNION SELECT 9503,'Stehrenberg','Stehrenberg'
+--UNION SELECT 9504,'Friltschen','Friltschen'
+--UNION SELECT 9506,'Lommis','Lommis'
+--UNION SELECT 9507,'Stettfurt','Stettfurt'
+--UNION SELECT 9514,'Wuppenau','Wuppenau'
+--UNION SELECT 9515,'Hosenruck','Hosenruck'
+--UNION SELECT 9517,'Mettlen','Mettlen'
+--UNION SELECT 9565,'Rothenhausen','Rothenhausen'
+--UNION SELECT 9524,'Zuzwil SG','Zuzwil SG'
+--UNION SELECT 9525,'Lenggenwil','Lenggenwil'
+--UNION SELECT 9526,'Zuckenriet','Zuckenriet'
+--UNION SELECT 9527,'Niederhelfenschwil','Niederhelfenschwil'
+--UNION SELECT 9532,'Rickenbach b. Wil','Rickenbach b. Wil'
+--UNION SELECT 9533,'Kirchberg SG','Kirchberg SG'
+--UNION SELECT 9535,'Wilen b. Wil','Wilen b. Wil'
+--UNION SELECT 9536,'Schwarzenbach SG','Schwarzenbach SG'
+--UNION SELECT 9543,'St. Margarethen TG','St. Margarethen TG'
+--UNION SELECT 9546,'Tuttwil','Tuttwil'
+--UNION SELECT 9547,'Wittenwil','Wittenwil'
+--UNION SELECT 9548,'Matzingen','Matzingen'
+--UNION SELECT 9552,'Bronschhofen','Bronschhofen'
+--UNION SELECT 9553,'Bettwiesen','Bettwiesen'
+--UNION SELECT 9555,'Tobel','Tobel'
+--UNION SELECT 9556,'Affeltrangen','Affeltrangen'
+--UNION SELECT 9565,'Schmidshof','Schmidshof'
+--UNION SELECT 9565,'Oppikon','Oppikon'
+--UNION SELECT 9565,'Bussnang','Bussnang'
+--UNION SELECT 9573,'Littenheid','Littenheid'
+--UNION SELECT 9602,'Bazenheid','Bazenheid'
+--UNION SELECT 9607,'Mosnang','Mosnang'
+--UNION SELECT 9608,'Ganterschwil','Ganterschwil'
+--UNION SELECT 9612,'Dreien','Dreien'
+--UNION SELECT 9614,'Libingen','Libingen'
+--UNION SELECT 9615,'Dietfurt','Dietfurt'
+--UNION SELECT 9620,'Lichtensteig','Lichtensteig'
+--UNION SELECT 9621,'Oberhelfenschwil','Oberhelfenschwil'
+--UNION SELECT 9622,'Krinau','Krinau'
+--UNION SELECT 9630,'Wattwil','Wattwil'
+--UNION SELECT 9631,'Ulisbach','Ulisbach'
+--UNION SELECT 9633,'Hemberg','Hemberg'
+--UNION SELECT 9642,'Ebnat-Kappel','Ebnat-Kappel'
+--UNION SELECT 9643,'Krummenau','Krummenau'
+--UNION SELECT 9650,'Nesslau','Nesslau'
+--UNION SELECT 9655,'Stein SG','Stein SG'
+--UNION SELECT 9652,'Neu St. Johann','Neu St. Johann'
+--UNION SELECT 9656,'Alt St. Johann','Alt St. Johann'
+--UNION SELECT 9657,'Unterwasser','Unterwasser'
+--UNION SELECT 9658,'Wildhaus','Wildhaus'
+--UNION SELECT 3185,'Schmitten FR','Schmitten FR'
+--UNION SELECT 3113,'Rubigen','Rubigen'
+--UNION SELECT 3900,'Brig Zustellung','Brig Zustellung'
+--UNION SELECT 6911,'Campione','Campione d''Italia'
+--UNION SELECT 6300,'Zug','Zug'
+--UNION SELECT 7000,'Chur Postauto','Chur Postauto GR Reg. Chur'
+--UNION SELECT 6900,'Lugano Stazione','Lugano Stazione'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 1934,'Bruson','Bruson'
+--UNION SELECT 3800,'Sundlauenen','Sundlauenen'
+--UNION SELECT 3000,'Bern','Bern'
+--UNION SELECT 1031,'Mex VD','Mex VD'
+--UNION SELECT 1734,'Tentlingen','Tentlingen'
+--UNION SELECT 1029,'Villars-Ste-Croix','Villars-Ste-Croix'
+--UNION SELECT 3044,'Innerberg','Innerberg'
+--UNION SELECT 1295,'Mies','Mies'
+--UNION SELECT 1295,'Tannay','Tannay'
+--UNION SELECT 1920,'Martigny 1 Dist','Martigny 1 Distribution'
+--UNION SELECT 6370,'Oberdorf NW','Oberdorf NW'
+--UNION SELECT 8317,'Tagelswangen','Tagelswangen'
+--UNION SELECT 3855,'Schwanden-Brienz','Schwanden b. Brienz'
+--UNION SELECT 3700,'Spiezwiler','Spiezwiler'
+--UNION SELECT 3961,'St-Jean VS','St-Jean VS'
+--UNION SELECT 3380,'Walliswil-Nbipp','Walliswil b. Niederbipp'
+--UNION SELECT 6900,'Massagno Caselle','Massagno Caselle'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 1267,'Vich','Vich'
+--UNION SELECT 1267,'Coinsins','Coinsins'
+--UNION SELECT 8000,'Gockhausen','Gockhausen'
+--UNION SELECT 5232,'Villigen PSI','Villigen PSI'
+--UNION SELECT 8614,'Sulzbach','Sulzbach'
+--UNION SELECT 1595,'Clavaleyres','Clavaleyres'
+--UNION SELECT 2735,'Champoz','Champoz'
+--UNION SELECT 2715,'Monible','Monible'
+--UNION SELECT 2827,'Schelten','Schelten'
+--UNION SELECT 2830,'Vellerat','Vellerat'
+--UNION SELECT 2575,'Hagneck','Hagneck'
+--UNION SELECT 2556,'Schwadernau','Schwadernau'
+--UNION SELECT 1470,'Bollion','Bollion'
+--UNION SELECT 1773,'Chandon','Chandon'
+--UNION SELECT 1534,'Chapelle Broye','Chapelle Broye'
+--UNION SELECT 1475,'Forel FR','Forel FR'
+--UNION SELECT 1483,'Frasses','Frasses'
+--UNION SELECT 1566,'Les Friques','Les Friques'
+--UNION SELECT 1484,'Granges-de-Vesin','Granges-de-Vesin'
+--UNION SELECT 1470,'Lully FR','Lully FR'
+--UNION SELECT 1475,'Montbrelloz','Montbrelloz'
+--UNION SELECT 1541,'Morens FR','Morens FR'
+--UNION SELECT 1528,'Praratoud','Praratoud'
+--UNION SELECT 1773,'Russy','Russy'
+--UNION SELECT 1470,'Seiry','Seiry'
+--UNION SELECT 1565,'Vallon','Vallon'
+--UNION SELECT 1483,'Vesin','Vesin'
+--UNION SELECT 1680,'Berlens','Berlens'
+--UNION SELECT 1670,'Bionnens','Bionnens'
+--UNION SELECT 1675,'Blessens','Blessens'
+--UNION SELECT 1694,'Chavannes-Orsonnen','Chavannes-sous-Orsonnens'
+--UNION SELECT 1697,'Les Ecasseys','Les Ecasseys'
+--UNION SELECT 1670,'Esmonts','Esmonts'
+--UNION SELECT 1673,'Gillarens','Gillarens'
+--UNION SELECT 1681,'Hennens','Hennens'
+--UNION SELECT 1688,'Lieffrens','Lieffrens'
+--UNION SELECT 1690,'Lussy FR','Lussy FR'
+--UNION SELECT 1687,'La Magne','La Magne'
+--UNION SELECT 1674,'Morlens','Morlens'
+--UNION SELECT 1675,'Mossel','Mossel'
+--UNION SELECT 1686,'La Neirigue','La Neirigue'
+--UNION SELECT 1694,'Villargiroud','Villargiroud'
+--UNION SELECT 1669,'Lessoc','Lessoc'
+--UNION SELECT 1625,'Maules','Maules'
+--UNION SELECT 1652,'Villarbeney','Villarbeney'
+--UNION SELECT 1666,'Villars-sous-Mont','Villars-sous-Mont'
+--UNION SELECT 1782,'Autafond','Autafond'
+--UNION SELECT 1782,'La Corbaz','La Corbaz'
+--UNION SELECT 1754,'Corjolens','Corjolens'
+--UNION SELECT 1782,'Cormagens','Cormagens'
+--UNION SELECT 1730,'Ecuvillens','Ecuvillens'
+--UNION SELECT 1724,'Essert FR','Essert FR'
+--UNION SELECT 1726,'Farvagny-le-Petit','Farvagny-le-Petit'
+--UNION SELECT 1724,'Ferpicloz','Ferpicloz'
+--UNION SELECT 1726,'Grenilles','Grenilles'
+--UNION SELECT 1782,'Lossy','Lossy'
+--UNION SELECT 1756,'Lovens','Lovens'
+--UNION SELECT 1727,'Magnedens','Magnedens'
+--UNION SELECT 1724,'Oberried FR','Oberried FR'
+--UNION SELECT 1723,'Pierrafortscha','Pierrafortscha'
+--UNION SELECT 1772,'Ponthaux','Ponthaux'
+--UNION SELECT 1726,'Posat','Posat'
+--UNION SELECT 1695,'Rueyres-St-Laurent','Rueyres-St-Laurent'
+--UNION SELECT 1695,'Villarsel-Gibloux','Villarsel-le-Gibloux'
+--UNION SELECT 1723,'Villarsel-Marly','Villarsel-sur-Marly'
+--UNION SELECT 1721,'Courtion','Courtion'
+--UNION SELECT 1792,'Guschelmuth','Guschelmuth'
+--UNION SELECT 1784,'Wallenried','Wallenried'
+--UNION SELECT 1716,'Oberschrot','Oberschrot'
+--UNION SELECT 1719,'Zumholz','Zumholz'
+--UNION SELECT 1609,'Besencens','Besencens'
+--UNION SELECT 1624,'Grattavache','Grattavache'
+--UNION SELECT 1174,'Pizy','Pizy'
+--UNION SELECT 1787,'Mur Vully VD','Mur Vully VD'
+--UNION SELECT 1580,'Oleyres','Oleyres'
+--UNION SELECT 1148,'Chavannes-Veyron','Chavannes-le-Veyron'
+--UNION SELECT 1148,'Mauraz','Mauraz'
+--UNION SELECT 1376,'Eclagnens','Eclagnens'
+--UNION SELECT 1376,'Goumoens-le-Jux','Goumoens-le-Jux'
+--UNION SELECT 1041,'Naz','Naz'
+--UNION SELECT 1421,'Grandevent','Grandevent'
+--UNION SELECT 1428,'Mutrux','Mutrux'
+--UNION SELECT 1423,'Romairon','Romairon'
+--UNION SELECT 1423,'Vaugondry','Vaugondry'
+--UNION SELECT 1134,'Chigny','Chigny'
+--UNION SELECT 1026,'Denges','Denges'
+--UNION SELECT 1410,'Correvon','Correvon'
+--UNION SELECT 1682,'Lovatens','Lovatens'
+--UNION SELECT 1063,'Martherenges','Martherenges'
+--UNION SELECT 1041,'Montaubion-Chardon','Montaubion-Chardonney'
+--UNION SELECT 1513,'Rossenges','Rossenges'
+--UNION SELECT 1683,'Sarzens','Sarzens'
+--UNION SELECT 1277,'Arnex-sur-Nyon','Arnex-sur-Nyon'
+--UNION SELECT 1279,'Bogis-Bossey','Bogis-Bossey'
+--UNION SELECT 1290,'Chavannes-des-Bois','Chavannes-des-Bois'
+--UNION SELECT 1355,'Sergey','Sergey'
+--UNION SELECT 1608,'Bussigny-sur-Oron','Bussigny-sur-Oron'
+--UNION SELECT 1608,'Chesalles-sur-Oron','Chesalles-sur-Oron'
+--UNION SELECT 1607,'Les Tavernes','Les Tavernes'
+--UNION SELECT 1607,'Les Thioleyres','Les Thioleyres'
+--UNION SELECT 1610,'Vuibroye','Vuibroye'
+--UNION SELECT 1682,'Cerniaz VD','Cerniaz VD'
+--UNION SELECT 1554,'Rossens VD','Rossens VD'
+--UNION SELECT 1525,'Seigneux','Seigneux'
+--UNION SELECT 1195,'Dully','Dully'
+--UNION SELECT 1180,'Tartegnin','Tartegnin'
+--UNION SELECT 1436,'Chamblon','Chamblon'
+--UNION SELECT 1443,'Essert-s-Champvent','Essert-sous-Champvent'
+--UNION SELECT 1443,'Villars-Champvent','Villars-sous-Champvent'
+--UNION SELECT 1407,'Gossens','Gossens'
+--UNION SELECT 1432,'Gressy','Gressy'
+--UNION SELECT 1047,'Oppens','Oppens'
+--UNION SELECT 1412,'Ursins','Ursins'
+--UNION SELECT 1404,'Villars-Epeney','Villars-Epeney'
+--UNION SELECT 2027,'Montalchez','Montalchez'
+--UNION SELECT 2063,'Engollon','Engollon'
+--UNION SELECT 2933,'Damphreux','Damphreux'
+--UNION SELECT 8165,'Oberweningen','Oberweningen'
+--UNION SELECT 8165,'Schleinikon','Schleinikon'
+--UNION SELECT 8543,'Bertschikon','Bertschikon'
+--UNION SELECT 3283,'Niederried b. Kall','Niederried b. Kallnach'
+--UNION SELECT 4932,'Gutenburg','Gutenburg'
+--UNION SELECT 3294,'Meienried','Meienried'
+--UNION SELECT 3429,'Hellsau','Hellsau'
+--UNION SELECT 3472,'Rumendingen','Rumendingen'
+--UNION SELECT 3425,'Willadingen','Willadingen'
+--UNION SELECT 2577,'Finsterhennen','Finsterhennen'
+--UNION SELECT 3303,'Ballmoos','Ballmoos'
+--UNION SELECT 3256,'Bangerten','Bangerten b. Dieterswil'
+--UNION SELECT 3053,'Diemerswil','Diemerswil'
+--UNION SELECT 3251,'Ruppoldsried','Ruppoldsried'
+--UNION SELECT 3305,'Scheunen','Scheunen'
+--UNION SELECT 3053,'Wiggiswil','Wiggiswil'
+--UNION SELECT 3309,'Zauggenried','Zauggenried'
+--UNION SELECT 3510,'Freimettigen','Freimettigen'
+--UNION SELECT 3671,'Herbligen','Herbligen'
+--UNION SELECT 3532,'Mirchel','Mirchel'
+--UNION SELECT 3629,'Oppligen','Oppligen'
+--UNION SELECT 3207,'Golaten','Golaten'
+--UNION SELECT 3272,'Epsach','Epsach'
+--UNION SELECT 3274,'Merzligen','Merzligen'
+--UNION SELECT 3632,'Niederstocken','Niederstocken'
+--UNION SELECT 3086,'Englisberg','Englisberg'
+--UNION SELECT 3629,'Jaberg','Jaberg'
+--UNION SELECT 3127,'Lohnstorf','Lohnstorf'
+--UNION SELECT 3116,'Noflen BE','Noflen BE'
+--UNION SELECT 3623,'Horrenbach','Horrenbach'
+--UNION SELECT 3624,'Schwendibach','Schwendibach'
+--UNION SELECT 3645,'Zwieselberg','Zwieselberg'
+--UNION SELECT 3376,'Berken','Berken'
+--UNION SELECT 3366,'Bollodingen','Bollodingen'
+--UNION SELECT 3367,'Ochlenberg','Ochlenberg'
+--UNION SELECT 4704,'Wolfisberg','Wolfisberg'
+--UNION SELECT 6277,'Lieli','Lieli LU'
+--UNION SELECT 6284,'Sulz LU','Sulz LU'
+--UNION SELECT 6038,'Honau','Honau'
+--UNION SELECT 8777,'Betschwanden','Betschwanden'
+--UNION SELECT 8774,'Leuggelbach','Leuggelbach'
+--UNION SELECT 3216,'Agriswil','Agriswil'
+--UNION SELECT 3280,'Greng','Greng'
+--UNION SELECT 3212,'Kleingurmels','Kleingurmels'
+--UNION SELECT 3215,'Lurtigen','Lurtigen'
+--UNION SELECT 3206,'Wallenbuch','Wallenbuch'
+--UNION SELECT 4583,'Aetigkofen','Aetigkofen'
+--UNION SELECT 3254,'Balm b. Messen','Balm b. Messen'
+--UNION SELECT 4556,'Bolken','Bolken'
+--UNION SELECT 4566,'Halten','Halten'
+--UNION SELECT 4558,'Heinrichswil','Heinrichswil'
+--UNION SELECT 4566,'Oekingen','Oekingen'
+--UNION SELECT 4556,'Steinhof SO','Steinhof SO'
+--UNION SELECT 4558,'Winistorf','Winistorf'
+--UNION SELECT 4535,'Kammersrohr','Kammersrohr'
+--UNION SELECT 4436,'Liedertswil','Liedertswil'
+--UNION SELECT 9057,'Schwende','Schwende'
+--UNION SELECT 7456,'Marmorera','Marmorera'
+--UNION SELECT 7130,'Schnaus','Schnaus'
+--UNION SELECT 7116,'St. Martin','St. Martin Lugnez'
+--UNION SELECT 7415,'Pratval','Pratval'
+--UNION SELECT 7423,'Portein','Portein'
+--UNION SELECT 7027,'Calfreisen','Calfreisen'
+--UNION SELECT 5619,'Uezwil','Uezwil'
+--UNION SELECT 1820,'Veytaux','Veytaux'
+--UNION SELECT 5012,'Eppenberg','Eppenberg'
+--UNION SELECT 8905,'Islisberg','Islisberg'
+--UNION SELECT 5637,'Geltwil','Geltwil'
+--UNION SELECT 5058,'Wiliberg','Wiliberg'
+--UNION SELECT 8580,'Hefenhofen','Hefenhofen'
+--UNION SELECT 8586,'Buchackern','Buchackern'
+--UNION SELECT 8586,'Engishofen','Engishofen'
+--UNION SELECT 8586,'Ennetaach','Ennetaach'
+--UNION SELECT 8253,'Willisdorf','Willisdorf'
+--UNION SELECT 8546,'Kefikon TG','Kefikon TG'
+--UNION SELECT 8553,'Eschikofen','Eschikofen'
+--UNION SELECT 8553,'Harenwilen','Harenwilen'
+--UNION SELECT 8553,'Mettendorf TG','Mettendorf TG'
+--UNION SELECT 8573,'Alterswilen','Alterswilen'
+--UNION SELECT 8573,'Altishausen','Altishausen'
+--UNION SELECT 8566,'Ellighausen','Ellighausen'
+--UNION SELECT 8566,'Lippoldswilen','Lippoldswilen'
+--UNION SELECT 8274,'Gottlieben','Gottlieben'
+--UNION SELECT 8585,'Herrenhof','Herrenhof'
+--UNION SELECT 8564,'Sonterswil','Sonterswil'
+--UNION SELECT 9556,'Zezikon','Zezikon'
+--UNION SELECT 8512,'Wetzikon TG','Wetzikon TG'
+--UNION SELECT 8360,'Wallenwil','Wallenwil'
+--UNION SELECT 8537,'Uerschhausen','Uerschhausen'
+--UNION SELECT 8505,'Dettighofen','Dettighofen'
+--UNION SELECT 8259,'Rheinklingen','Rheinklingen'
+--UNION SELECT 8572,'Andhausen','Andhausen'
+--UNION SELECT 8572,'Graltshausen','Graltshausen'
+--UNION SELECT 8585,'Birwinken','Birwinken'
+--UNION SELECT 8572,'Guntershausen Berg','Guntershausen b. Berg'
+--UNION SELECT 8585,'Klarsreuti','Klarsreuti'
+--UNION SELECT 8575,'Istighofen','Istighofen'
+--UNION SELECT 8556,'Engwang','Engwang'
+--UNION SELECT 8556,'Illhart','Illhart'
+--UNION SELECT 6720,'Ghirone','Ghirone'
+--UNION SELECT 6724,'Largario','Largario'
+--UNION SELECT 6723,'Marolta','Marolta'
+--UNION SELECT 6963,'Cureggia','Cureggia'
+--UNION SELECT 6814,'Lamone','Lamone'
+--UNION SELECT 3995,'Ausserbinn','Ausserbinn'
+--UNION SELECT 3989,'Ritzingen','Ritzingen'
+--UNION SELECT 3989,'Selkingen','Selkingen'
+--UNION SELECT 3995,'Steinhaus','Steinhaus'
+--UNION SELECT 3957,'Bratsch','Bratsch'
+--UNION SELECT 3983,'Bister','Bister'
+--UNION SELECT 3983,'Filet','Filet'
+--UNION SELECT 3983,'Goppisberg','Goppisberg'
+--UNION SELECT 3994,'Martisberg','Martisberg'
+--UNION SELECT 3940,'Steg VS','Steg VS'
+--UNION SELECT 9498,'Planken','Planken'
+--UNION SELECT 6212,'Kaltbach','Kaltbach'
+--UNION SELECT 8525,'Wilen b. Neunforn','Wilen b. Neunforn'
+--UNION SELECT 2735,'Malleray','Malleray'
+--UNION SELECT 1626,'Treyfayes','Treyfayes'
+--UNION SELECT 2027,'Fresens','Fresens'
+--UNION SELECT 2933,'Lugnez','Lugnez'
+--UNION SELECT 2953,'Pleujouse','Pleujouse'
+--UNION SELECT 1624,'Progens','Progens'
+--UNION SELECT 3984,'Fieschertal','Fieschertal'
+--UNION SELECT 6814,'Cadempino','Cadempino'
+--UNION SELECT 8905,'Arni AG','Arni AG'
+--UNION SELECT 9470,'Werdenberg','Werdenberg'
+--UNION SELECT 8427,'Freienstein','Freienstein'
+--UNION SELECT 8427,'Rorbas','Rorbas'
+--UNION SELECT 1626,'Rueyres-Treyfayes','Rueyres-Treyfayes'
+--UNION SELECT 1884,'Arveyes','Arveyes'
+--UNION SELECT 3963,'Aminona','Aminona'
+--UNION SELECT 5053,'Wittwil','Wittwil'
+--UNION SELECT 6000,'St. Niklausen LU','St. Niklausen LU'
+--UNION SELECT 6995,'Madonna del Piano','Madonna del Piano'
+--UNION SELECT 7226,'Fajauna','Fajauna'
+--UNION SELECT 7743,'Miralago','Miralago'
+--UNION SELECT 8212,'Nohl','Nohl'
+--UNION SELECT 9122,'Ebersol','Ebersol'
+--UNION SELECT 6340,'Baar','Baar'
+--UNION SELECT 6900,'Paradiso','Paradiso'
+--UNION SELECT 1754,'Avry-sur-Matran','Avry-sur-Matran'
+--UNION SELECT 1774,'Montagny-les-Monts','Montagny-les-Monts'
+--UNION SELECT 1110,'Morges Grosse P.','Morges Grosse Pierre'
+--UNION SELECT 9000,'St. Gallen','St. Gallen Sonderdienste'
+--UNION SELECT 1585,'Bellerive VD','Bellerive VD'
+--UNION SELECT 2052,'La Vue-des-Alpes','La Vue-des-Alpes'
+--UNION SELECT 3656,'Ringoldswil','Ringoldswil'
+--UNION SELECT 4922,'Thunstetten','Thunstetten'
+--UNION SELECT 1700,'Fribourg Beaumont','Fribourg Beaumont'
+--UNION SELECT 1400,'Yverdon Villette','Yverdon La Villette'
+--UNION SELECT 8879,'Pizolpark Mels','Pizolpark Mels'
+--UNION SELECT 1195,'Bursinel','Bursinel'
+--UNION SELECT 6207,'Nottwil SPZ','Nottwil Paraplegikerzentrum'
+--UNION SELECT 3000,'Bern Radio Schweiz','Bern Radio Schweiz'
+--UNION SELECT 3900,'Brigerbad','Brigerbad'
+--UNION SELECT 8118,'Pfaffhausen','Pfaffhausen'
+--UNION SELECT 1428,'Provence','Provence'
+--UNION SELECT 1091,'Chenaux','Chenaux'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 9000,'St. Gallen','St. Gallen Mona Versand'
+--UNION SELECT 6600,'Solduno','Solduno'
+--UNION SELECT 3600,'Thun','Thun'
+--UNION SELECT 1723,'Marly 1','Marly 1'
+--UNION SELECT 8832,'Wilen b. Wollerau','Wilen b. Wollerau'
+--UNION SELECT 1754,'Avry-Centre FR','Avry-Centre FR'
+--UNION SELECT 1775,'Mannens','Mannens'
+--UNION SELECT 1775,'Grandsivaz','Grandsivaz'
+--UNION SELECT 8926,'Hauptikon','Hauptikon'
+--UNION SELECT 8926,'Uerzlikon','Uerzlikon'
+--UNION SELECT 1026,'Echandens','Echandens'
+--UNION SELECT 1400,'Yverdon car postal','Yverdon car postal VD-Broye'
+--UNION SELECT 3900,'Brig Postauto','Brig Postauto Oberwallis'
+--UNION SELECT 8500,'Frauenfeld Pauto','Frauenfeld Postauto TG-SH'
+--UNION SELECT 8106,'Adlikon b.Regensdf','Adlikon b. Regensdorf'
+--UNION SELECT 9400,'Rorschach Zust','Rorschach Zustellung'
+--UNION SELECT 6343,'Buonas','Buonas'
+--UNION SELECT 6343,'Risch','Risch'
+--UNION SELECT 3945,'Niedergampel','Niedergampel'
+--UNION SELECT 1400,'Yverdon Dist','Yverdon Distribution'
+--UNION SELECT 3415,'Hasle b. Burgdorf','Hasle b. Burgdorf'
+--UNION SELECT 6410,'Rigi Scheidegg','Rigi Scheidegg'
+--UNION SELECT 1631,'Bulle','Bulle centre de traitement'
+--UNION SELECT 3040,'Bern Verarb.zentr.','Bern Verarbeitungszentrum'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 6000,'Luzern','Luzern'
+--UNION SELECT 8759,'Netstal','Netstal'
+--UNION SELECT 9000,'St. Gallen','St. Gallen'
+--UNION SELECT 6500,'Bellinzona CS','Bellinzona centro servici'
+--UNION SELECT 8268,'Salenstein','Salenstein'
+--UNION SELECT 8522,'Aawangen','Aawangen'
+--UNION SELECT 9503,'Lanterswil','Lanterswil'
+--UNION SELECT 8574,'Oberhofen TG','Oberhofen TG'
+--UNION SELECT 6260,'Hintermoos','Hintermoos'
+--UNION SELECT 1279,'Chavannes-Bogis LS','Chavannes-de-Bogis OLS'
+--UNION SELECT 1950,'Sion 4','Sion 4'
+--UNION SELECT 6383,'Wiesenberg','Wiesenberg'
+--UNION SELECT 4573,'Lohn-Ammannsegg','Lohn-Ammannsegg'
+--UNION SELECT 8152,'Glattbrugg Zust','Glattbrugg Zustellung'
+--UNION SELECT 1988,'Thyon-Les Collons','Thyon-Les Collons'
+--UNION SELECT 8965,'Berikon 2 Dorf','Berikon 2 Dorf'
+--UNION SELECT 8965,'Berikon-Widen','Berikon-Widen'
+--UNION SELECT 5046,'Schmiedrued-Walde','Schmiedrued-Walde'
+--UNION SELECT 6031,'Ebikon','Ebikon'
+--UNION SELECT 6390,'Engelberg','Engelberg'
+--UNION SELECT 6281,'Hochdorf','Hochdorf'
+--UNION SELECT 6011,'Kriens','Kriens'
+--UNION SELECT 6060,'Sarnen 1','Sarnen 1'
+--UNION SELECT 6371,'Stans','Stans'
+--UNION SELECT 6431,'Schwyz','Schwyz'
+--UNION SELECT 8302,'Kloten Kaserne','Kloten Kaserne'
+--UNION SELECT 8725,'Gebertingen','Gebertingen'
+--UNION SELECT 6900,'Lugano Loreto','Lugano Loreto'
+--UNION SELECT 6900,'Lugano 7 Caselle','Lugano 7 Loreto Caselle'
+--UNION SELECT 9470,'Buchs SG 1','Buchs SG 1'
+--UNION SELECT 9470,'Buchs SG 3','Buchs SG 3'
+--UNION SELECT 1260,'Nyon 2','Nyon 2'
+--UNION SELECT 1260,'Nyon 1','Nyon 1'
+--UNION SELECT 1530,'Payerne Caserne','Payerne Caserne'
+--UNION SELECT 8903,'Birmensdorf ZH Kas','Birmensdorf ZH Kaserne'
+--UNION SELECT 8500,'Frauenfeld Kaserne','Frauenfeld Kaserne'
+--UNION SELECT 9401,'Rorschach','Rorschach'
+--UNION SELECT 9500,'Wil SG 1','Wil SG 1'
+--UNION SELECT 5620,'Bremgarten AG West','Bremgarten AG West'
+--UNION SELECT 5620,'Bremgarten AG 1','Bremgarten AG 1'
+--UNION SELECT 4500,'Solothurn','Solothurn'
+--UNION SELECT 6060,'Sarnen 2','Sarnen 2'
+--UNION SELECT 6060,'Sarnen 1','Sarnen 1'
+--UNION SELECT 1958,'Uvrier','Uvrier'
+--UNION SELECT 9000,'St. Gallen 14 Zust','St. Gallen 14 Zustellung'
+--UNION SELECT 3800,'Interlaken Pauto','Interlaken Postauto BE Ober'
+--UNION SELECT 4000,'Basel Postauto','Basel Postauto Nordwestschw'
+--UNION SELECT 6000,'Luzern Postauto','Luzern Postauto Zentralschw'
+--UNION SELECT 8730,'Uznach Postauto','Uznach Postauto Linth-SZ-GL'
+--UNION SELECT 9000,'St. Gallen Postaut','St. Gallen Postauto SG-Azel'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 4524,'Balmberg','Balmberg'
+--UNION SELECT 4524,'Oberbalmberg','Oberbalmberg'
+--UNION SELECT 6156,'Luthern Bad','Luthern Bad'
+--UNION SELECT 6260,'Mehlsecken','Mehlsecken'
+--UNION SELECT 6600,'Muralto','Muralto'
+--UNION SELECT 6161,'Entlebuch Versand','Entlebuch Versandzentrum'
+--UNION SELECT 6677,'Aurigeno','Aurigeno'
+--UNION SELECT 9200,'Gossau SG','Gossau SG'
+--UNION SELECT 6900,'Lugano 2','Lugano 2'
+--UNION SELECT 6600,'Locarno 4 Solduno','Locarno 4 Solduno'
+--UNION SELECT 8510,'Frauenfeld','Frauenfeld Kant. Verwaltung'
+--UNION SELECT 3050,'Bern Swisscom','Bern Swisscom'
+--UNION SELECT 6900,'Lugano 8','Lugano 8'
+--UNION SELECT 6900,'Lugano 4','Lugano 4'
+--UNION SELECT 6900,'Lugano 6','Lugano 6'
+--UNION SELECT 7431,'Obermutten','Obermutten'
+--UNION SELECT 1892,'Lavey-les-Bains','Lavey-les-Bains'
+--UNION SELECT 2575,'Gerolfingen','Gerolfingen'
+--UNION SELECT 3000,'Bern 60 UPD','Bern 60 UPD'
+--UNION SELECT 8260,'Stein am Rhein 1','Stein am Rhein 1'
+--UNION SELECT 8260,'Stein am Rhein 2','Stein am Rhein 2 Stadt'
+--UNION SELECT 9214,'Kradolf','Kradolf'
+--UNION SELECT 1400,'Yverdon Caserne','Yverdon Caserne'
+--UNION SELECT 2013,'Colombier NE Cas','Colombier NE Caserne'
+--UNION SELECT 1680,'Romont Caserne','Romont Caserne'
+--UNION SELECT 6032,'Emmen Kaserne','Emmen Kaserne'
+--UNION SELECT 1700,'Fribourg Caserne','Fribourg Caserne'
+--UNION SELECT 6810,'Isone Caserma','Isone Caserma'
+--UNION SELECT 6616,'Losone Caserma','Losone Caserma'
+--UNION SELECT 6000,'Luzern Kaserne','Luzern Kaserne'
+--UNION SELECT 3250,'Lyss Kaserne','Lyss Kaserne'
+--UNION SELECT 8887,'Mels Kaserne','Mels Kaserne'
+--UNION SELECT 6802,'Rivera Caserma','Rivera Caserma'
+--UNION SELECT 1510,'Moudon Caserne','Moudon Caserne'
+--UNION SELECT 1890,'St-Maurice Caserne','St-Maurice Caserne'
+--UNION SELECT 1950,'Sion Caserne','Sion Caserne'
+--UNION SELECT 3380,'Wangen Kaserne','Wangen a. A. Kaserne'
+--UNION SELECT 6370,'Stans Kaserne','Stans Kaserne'
+--UNION SELECT 6780,'Airolo Caserma','Airolo Caserma'
+--UNION SELECT 3000,'Bern 22 Kaserne','Bern 22 Kaserne'
+--UNION SELECT 2900,'Porrentruy Caserne','Porrentruy Caserne'
+--UNION SELECT 8640,'Hurden','Hurden'
+--UNION SELECT 6460,'Altdorf UR 2','Altdorf UR 2'
+--UNION SELECT 2075,'Thielle','Thielle'
+--UNION SELECT 2075,'Wavre','Wavre'
+--UNION SELECT 1721,'Misery','Misery'
+--UNION SELECT 3632,'Oberstocken','Oberstocken'
+--UNION SELECT 1068,'Les Monts-de-Pully','Les Monts-de-Pully'
+--UNION SELECT 8285,'Kreuzlingen Ifolor','Kreuzlingen Ifolor AG'
+--UNION SELECT 4000,'Basel SSF','Basel SSF'
+--UNION SELECT 1762,'Givisiez Dist Ba','Givisiez Dist Ba'
+--UNION SELECT 3600,'Thun Dist Ba','Thun Dist Ba'
+--UNION SELECT 2510,'Biel/Bienne DistBa','Biel/Bienne Dist Ba'
+--UNION SELECT 8200,'Schaffhausen DistB','Schaffhausen Dist Ba'
+--UNION SELECT 1227,'Carouge GE Dist','Carouge GE Distribution'
+--UNION SELECT 1196,'Gland Distribution','Gland Distribution'
+--UNION SELECT 1218,'Grand-Saconnex D','Grand-Saconnex Distribution'
+--UNION SELECT 1213,'Petit-Lancy Dist','Petit-Lancy Distribution'
+--UNION SELECT 1219,'Le Lignon Dist','Le Lignon Distribution'
+--UNION SELECT 1217,'Meyrin Dist','Meyrin Distribution'
+--UNION SELECT 1290,'Versoix Dist','Versoix Distribution'
+--UNION SELECT 1860,'Aigle Distribution','Aigle Distribution'
+--UNION SELECT 1030,'Bussigny Dist','Bussigny Distribution'
+--UNION SELECT 1023,'Crissier 1 Dist','Crissier Distribution'
+--UNION SELECT 4242,'Laufen Zustellung','Laufen Zustellung'
+--UNION SELECT 4132,'Muttenz 1 Zust','Muttenz 1 Zustellung'
+--UNION SELECT 4104,'Oberwil BL Zust','Oberwil BL Zustellung'
+--UNION SELECT 4702,'Oensingen Zust','Oensingen Zustellung'
+--UNION SELECT 4153,'Reinach BL Zust','Reinach BL Zustellung'
+--UNION SELECT 5620,'Bremgarten 1 Zust','Bremgarten AG 1 Zustellung'
+--UNION SELECT 5600,'Lenzburg Zust','Lenzburg Zustellung'
+--UNION SELECT 4310,'Rheinfelden 1 Zust','Rheinfelden 1 Zustellung'
+--UNION SELECT 8957,'Spreitenbach Zust','Spreitenbach Zustellung'
+--UNION SELECT 5610,'Wohlen AG 1 Zust','Wohlen AG 1 Zustellung'
+--UNION SELECT 4800,'Zofingen Zust','Zofingen Zustellung'
+--UNION SELECT 6440,'Brunnen Zust','Brunnen Zustellung'
+--UNION SELECT 6030,'Ebikon Zustellung','Ebikon Zustellung'
+--UNION SELECT 6390,'Engelberg Zust','Engelberg Zustellung'
+--UNION SELECT 6410,'Goldau Zust','Goldau Zustellung'
+--UNION SELECT 6010,'Kriens 2 Zust','Kriens 2 Zustellung'
+--UNION SELECT 6102,'Malters Zust','Malters Zustellung'
+--UNION SELECT 6430,'Schwyz Zust','Schwyz Zustellung'
+--UNION SELECT 6210,'Sursee Zust','Sursee Zustellung'
+--UNION SELECT 6130,'Willisau Zust','Willisau Zustellung'
+--UNION SELECT 1870,'Monthey 1 Dist','Monthey 1 Distribution'
+--UNION SELECT 3280,'Murten Zustellung','Murten Zustellung'
+--UNION SELECT 8134,'Adliswil 1 Zust','Adliswil 1 Zustellung'
+--UNION SELECT 8910,'Affoltern a.A.Zust','Affoltern am A. Zustellung'
+--UNION SELECT 8580,'Amriswil Zust','Amriswil Zustellung'
+--UNION SELECT 9320,'Arbon Zustellung','Arbon Zustellung'
+--UNION SELECT 8903,'Birmensdorf Zust','Birmensdorf ZH Zustellung'
+--UNION SELECT 9220,'Bischofszell Zust','Bischofszell Zustellung'
+--UNION SELECT 8157,'Dielsdorf Zust','Dielsdorf Zustellung'
+--UNION SELECT 8307,'Effretikon Zust','Effretikon Zustellung'
+--UNION SELECT 8424,'Embrach Zustellung','Embrach Zustellung'
+--UNION SELECT 1350,'Orbe Distribution','Orbe Distribution'
+--UNION SELECT 8706,'Meilen Zust','Meilen Zustellung'
+--UNION SELECT 1020,'Renens VD 1 Dist','Renens VD 1 Distribution'
+--UNION SELECT 3960,'Sierre Dist','Sierre Distribution'
+--UNION SELECT 3963,'C.-Montana 1 Dist','Crans-Montana 1 Dist'
+--UNION SELECT 3123,'Belp Zustellung','Belp Zustellung'
+--UNION SELECT 8590,'Romanshorn Zust','Romanshorn Zustellung'
+--UNION SELECT 3714,'Frutigen Zust','Frutigen Zustellung'
+--UNION SELECT 8800,'Thalwil Zustellung','Thalwil Zustellung'
+--UNION SELECT 3360,'Hbuchsee Zust','Herzogenbuchsee Zustellung'
+--UNION SELECT 8636,'Wald ZH Zustellung','Wald ZH Zustellung'
+--UNION SELECT 4950,'Huttwil Zustellung','Huttwil Zustellung'
+--UNION SELECT 8304,'Wallisellen Zust','Wallisellen Zustellung'
+--UNION SELECT 3800,'Interlaken Zust','Interlaken Zustellung'
+--UNION SELECT 8570,'Weinfelden Zust','Weinfelden Zustellung'
+--UNION SELECT 8126,'Zumikon Zust','Zumikon Zustellung'
+--UNION SELECT 8406,'Winterthur 6 Zust','Winterthur 6 Zustellung'
+--UNION SELECT 3422,'Kirchberg BE Zust','Kirchberg BE Zustellung'
+--UNION SELECT 4900,'Langenthal 1 Zust','Langenthal 1 Zustellung'
+--UNION SELECT 9050,'Appenzell Zust','Appenzell Zustellung'
+--UNION SELECT 9100,'Herisau 1 Zust','Herisau 1 Zustellung'
+--UNION SELECT 3700,'Spiez Zustellung','Spiez Zustellung'
+--UNION SELECT 3612,'Steffisburg 1 Zust','Steffisburg 1 Zustellung'
+--UNION SELECT 3076,'Worb Zustellung','Worb Zustellung'
+--UNION SELECT 8340,'Hinwil Zustellung','Hinwil Zustellung'
+--UNION SELECT 1212,'Grand-Lancy Dist','Grand-Lancy 1 Distribution'
+--UNION SELECT 9200,'Gossau SG 1 Zust','Gossau SG 1 Zustellung'
+--UNION SELECT 2400,'Le Locle Dist','Le Locle Distribution'
+--UNION SELECT 2740,'Moutier 1 Dist','Moutier 1 Distribution'
+--UNION SELECT 4123,'Allschwil Zust','Allschwil Zustellung'
+--UNION SELECT 4710,'Balsthal Zust','Balsthal Zustellung'
+--UNION SELECT 4563,'Gerlafingen Zust','Gerlafingen Zustellung'
+--UNION SELECT 5200,'Brugg AG 1 Zust','Brugg AG 1 Zustellung'
+--UNION SELECT 1274,'Signy-Centre','Signy-Centre'
+--UNION SELECT 9476,'Fontnas','Fontnas'
+--UNION SELECT 6000,'Luzern 31','Luzern 31'
+--UNION SELECT 6000,'Luzern 30 AAL','Luzern 30 AAL'
+--UNION SELECT 5018,'Erlinsbach','Erlinsbach'
+--UNION SELECT 1310,'Daillens Dist Ba','Daillens Dist Ba'
+--UNION SELECT 1310,'Daillens Centre Co','Daillens Centre Colis'
+--UNION SELECT 1530,'Payerne Dist','Payerne Distribution'
+--UNION SELECT 1630,'Bulle 1 Dist','Bulle 1 Distribution'
+--UNION SELECT 3550,'Langnau i. E. Zust','Langnau i. E. Zustellung'
+--UNION SELECT 7270,'Davos Zust','Davos Zustellung'
+--UNION SELECT 1274,'Signy','Signy'
+--UNION SELECT 3400,'Burgdorf Dist Fil','Burgdorf Dist Fil'
+--UNION SELECT 8307,'Effretikon Dist Ba','Effretikon Dist Ba'
+--UNION SELECT 8520,'Frauenfeld PZ','Frauenfeld Paketzentrum'
+--UNION SELECT 8520,'Frauenfeld Dist Ba','Frauenfeld Dist Ba'
+--UNION SELECT 8343,'Hinwil Dist Ba','Hinwil Dist Ba'
+--UNION SELECT 9442,'Berneck Dist Ba','Berneck Dist Ba'
+--UNION SELECT 8564,'Hefenhausen','Hefenhausen'
+--UNION SELECT 8564,'Wagerswil','Wagerswil'
+--UNION SELECT 9565,'Oberbussnang','Oberbussnang'
+--UNION SELECT 2950,'Courtemautruy','Courtemautruy'
+--UNION SELECT 1347,'Le Solliat','Le Solliat'
+--UNION SELECT 1148,'Villars-Bozon','Villars-Bozon'
+--UNION SELECT 1304,'Allens','Allens'
+--UNION SELECT 8867,'Niederurnen D. Hub','Niederurnen Dist Hub'
+--UNION SELECT 8590,'Romanshorn Zust P','Romanshorn Zust Pakete'
+--UNION SELECT 3800,'Interlaken Zust. P','Interlaken Zustellung P'
+--UNION SELECT 1630,'Bulle Dist Fil','Bulle Dist Fil'
+--UNION SELECT 1196,'Gland Dist Fil','Gland Dist Fil'
+--UNION SELECT 3000,'Bern 65','Bern 65 SBB'
+--UNION SELECT 1033,'Cheseaux Dist','Cheseaux-Laus Distribution'
+--UNION SELECT 3960,'Niouc','Niouc'
+--UNION SELECT 4410,'Liestal Dist Ba','Liestal Dist Ba'
+--UNION SELECT 1912,'Produit Leytron','Produit Leytron'
+--UNION SELECT 1912,'Montagnon Leytron','Montagnon Leytron'
+--UNION SELECT 1912,'Dugny Leytron','Dugny Leytron'
+--UNION SELECT 1914,'Auddes-sur-Riddes','Auddes-sur-Riddes'
+--UNION SELECT 1932,'Les Valettes','Les Valettes Bovernier'
+--UNION SELECT 1933,'VensSembrancher','Vens Sembrancher'
+--UNION SELECT 1933,'Chamoille','Chamoille Sembrancher'
+--UNION SELECT 1933,'La Garde','La Garde Sembrancher'
+--UNION SELECT 1945,'Fontaine Dessus','Fontaine Dessus Liddes'
+--UNION SELECT 1945,'Fontaine Dessous','Fontaine Dessous Liddes'
+--UNION SELECT 1945,'Dranse Liddes','Dranse Liddes'
+--UNION SELECT 1945,'Chandonne Liddes','Chandonne Liddes'
+--UNION SELECT 1945,'Rive HauteLiddes','Rive Haute Liddes'
+--UNION SELECT 1945,'FornexLiddes','Fornex Liddes'
+--UNION SELECT 1945,'Les Moulins VS','Les Moulins VS Liddes'
+--UNION SELECT 1945,'Palasuit Liddes','Palasuit Liddes'
+--UNION SELECT 1945,'Chez PetitLiddes','Chez Petit Liddes'
+--UNION SELECT 1947,'Champsec','Champsec'
+--UNION SELECT 1955,'Grugnay Chamoson','Grugnay Chamoson'
+--UNION SELECT 1966,'Fortunau Ayent','Fortunau Ayent'
+--UNION SELECT 1966,'Luc Ayent','Luc Ayent'
+--UNION SELECT 1966,'St-Romain Ayent','St-Romain Ayent'
+--UNION SELECT 1966,'Saxonne Ayent','Saxonne Ayent'
+--UNION SELECT 1966,'Villa Ayent','Villa Ayent'
+--UNION SELECT 1966,'La Place Ayent','La Place Ayent'
+--UNION SELECT 1966,'Botyre Ayent','Botyre Ayent'
+--UNION SELECT 1966,'Blignou Ayent','Blignou Ayent'
+--UNION SELECT 1966,'Argnou Ayent','Argnou Ayent'
+--UNION SELECT 1969,'Liez St-Martin','Liez St-Martin'
+--UNION SELECT 1969,'Trogne St-Martin','Trogne St-Martin'
+--UNION SELECT 1969,'Suen St-Martin','Suen St-Martin'
+--UNION SELECT 1971,'Champlan','Champlan Grimisuat'
+--UNION SELECT 1983,'Lanna','Lanna'
+--UNION SELECT 1991,'Arvillard Salins','Arvillard Salins'
+--UNION SELECT 1991,'Pravidondaz','Pravidondaz Salins'
+--UNION SELECT 1991,'Turin Salins','Turin Salins'
+--UNION SELECT 1996,'Brignon Nendaz','Brignon Nendaz'
+--UNION SELECT 1992,'La Vernaz','La Vernaz Les Agettes'
+--UNION SELECT 1996,'Bieudron Nendaz','Bieudron Nendaz'
+--UNION SELECT 1996,'Saclentse','Saclentse'
+--UNION SELECT 1955,'Mayens-de-Chamoson','Mayens-de-Chamoson'
+--UNION SELECT 1585,'Cotterd','Cotterd'
+--UNION SELECT 1873,'Champoussin','Champoussin'
+--UNION SELECT 2063,'Fenin','Fenin'
+--UNION SELECT 2063,'Saules','Saules'
+--UNION SELECT 1873,'Les Crosets','Les Crosets'
+--UNION SELECT 1095,'Lutry Distribution','Lutry Distribution'
+--UNION SELECT 1052,'Mont-Lausanne Dist','Le Mont-sur-Lausanne Dist'
+--UNION SELECT 2013,'Colombier NE Dist','Colombier NE Distribution'
+--UNION SELECT 2074,'Marin-Epagnier Dis','Marin-Epagnier Distribution'
+--UNION SELECT 2520,'La Neuveville Dist','La Neuveville Distribution'
+--UNION SELECT 2720,'Tramelan Dist','Tramelan Distribution'
+--UNION SELECT 2610,'St-Imier Dist','St-Imier Distribution'
+--UNION SELECT 1580,'Avenches Dist','Avenches Distribution'
+--UNION SELECT 1510,'Moudon Dist','Moudon Distribution'
+--UNION SELECT 1680,'Romont FR Dist','Romont FR Distribution'
+--UNION SELECT 1880,'Bex Distribution','Bex Distribution'
+--UNION SELECT 1233,'Bernex Dist','Bernex Distribution'
+--UNION SELECT 1214,'Vernier Dist','Vernier Distribution'
+--UNION SELECT 1180,'Rolle Distribution','Rolle Distribution'
+--UNION SELECT 1040,'Echallens Dist','Echallens Distribution'
+--UNION SELECT 3150,'Schwarzenburg Zust','Schwarzenburg Zustellung'
+--UNION SELECT 3210,'Kerzers Zust','Kerzers Zustellung'
+--UNION SELECT 3855,'Brienz BE Zust','Brienz BE Zustellung'
+--UNION SELECT 3860,'Meiringen Zust','Meiringen Zustellung'
+--UNION SELECT 4460,'Gelterkinden Zust','Gelterkinden Zustellung'
+--UNION SELECT 4512,'Bellach Zustellung','Bellach Zustellung'
+--UNION SELECT 4663,'Aarburg Zust','Aarburg Zustellung'
+--UNION SELECT 5033,'Buchs AG Zust','Buchs AG Zustellung'
+--UNION SELECT 5036,'Oberentfelden Zust','Oberentfelden Zustellung'
+--UNION SELECT 5070,'Frick Zustellung','Frick Zustellung'
+--UNION SELECT 5734,'Reinach AG Zust','Reinach AG Zustellung'
+--UNION SELECT 5630,'Muri AG Zustellung','Muri AG Zustellung'
+--UNION SELECT 6280,'Hochdorf Zust','Hochdorf Zustellung'
+--UNION SELECT 6110,'Wolhusen Zust','Wolhusen Zustellung'
+--UNION SELECT 6260,'Reiden Zustellung','Reiden Zustellung'
+--UNION SELECT 6060,'Sarnen 2 Zust','Sarnen 2 Zustellung'
+--UNION SELECT 8965,'Berikon 1 Zust','Berikon 1 Zustellung'
+--UNION SELECT 8260,'Stein a.Rh. 1 Zust','Stein am Rhein 1 Zustellung'
+--UNION SELECT 8730,'Uznach Zustellung','Uznach Zustellung'
+--UNION SELECT 8840,'Einsiedeln Zust','Einsiedeln Zustellung'
+--UNION SELECT 8854,'Siebnen Zust','Siebnen Zustellung'
+--UNION SELECT 9230,'Flawil 1 Zust','Flawil 1 Zustellung'
+--UNION SELECT 9240,'Uzwil Zustellung','Uzwil Zustellung'
+--UNION SELECT 9630,'Wattwil Zust','Wattwil Zustellung'
+--UNION SELECT 9053,'Teufen AR Zust','Teufen AR Zustellung'
+--UNION SELECT 9410,'Heiden Zustellung','Heiden Zustellung'
+--UNION SELECT 9424,'Rheineck Zust','Rheineck Zustellung'
+--UNION SELECT 9470,'Buchs SG 1 Zust','Buchs SG 1 Zustellung'
+--UNION SELECT 7013,'Domat/Ems Zust','Domat/Ems Zustellung'
+--UNION SELECT 7302,'Landquart Zust','Landquart Zustellung'
+--UNION SELECT 7320,'Sargans Zustellung','Sargans Zustellung'
+--UNION SELECT 7310,'Bad Ragaz Zust','Bad Ragaz Zustellung'
+--UNION SELECT 8887,'Mels Zustellung','Mels Zustellung'
+--UNION SELECT 8890,'Flums Zustellung','Flums Zustellung'
+--UNION SELECT 7503,'Samedan Zustellung','Samedan Zustellung'
+--UNION SELECT 4609,'Olten','Olten Sonderdienste'
+--UNION SELECT 1772,'Nierlet-les-Bois','Nierlet-les-Bois'
+--UNION SELECT 1818,'Montreux Redoute','Montreux La Redoute'
+--UNION SELECT 1787,'Mur Vully FR','Mur Vully FR'
+--UNION SELECT 1892,'Morcles','Morcles'
+--UNION SELECT 2074,'Marin-Centre','Marin-Centre'
+--UNION SELECT 9479,'Gretschins','Gretschins'
+--UNION SELECT 9479,'Malans SG','Malans SG'
+--UNION SELECT 8540,'Frauenfeld CIRCLE','Frauenfeld CIRCLE'
+--UNION SELECT 8530,'Frauenfeld CALL','Frauenfeld CALL'
+--UNION SELECT 1330,'Daillens CALL','Daillens CALL'
+--UNION SELECT 1320,'Daillens CIRCLE','Daillens CIRCLE'
+--UNION SELECT 6010,'Kriens 1','Kriens 1'
+--UNION SELECT 6010,'Kriens 2 Sternmatt','Kriens 2 Sternmatt'
+--UNION SELECT 6010,'Kriens 2','Kriens 2'
+--UNION SELECT 6500,'Bellinzona VZ','Bellinzona VZ'
+--UNION SELECT 3989,'Grafschaft','Grafschaft'
+--UNION SELECT 2500,'Biel/Bienne 10','Biel/Bienne 10'
+--UNION SELECT 8564,'Hattenhausen','Hattenhausen'
+--UNION SELECT 1440,'Montagny-Chamard','Montagny-Chamard'
+--UNION SELECT 2149,'Fretereules','Fretereules'
+--UNION SELECT 2149,'Brot-Dessous','Brot-Dessous'
+--UNION SELECT 9249,'Oberstetten','Oberstetten'
+--UNION SELECT 9249,'Niederstetten','Niederstetten'
+--UNION SELECT 8564,'Gunterswilen','Gunterswilen'
+--UNION SELECT 1023,'Crissier Closalet','Crissier 2 Closalet'
+--UNION SELECT 1023,'Crissier 1','Crissier 1'
+--UNION SELECT 3860,'Schattenhalb','Schattenhalb'
+--UNION SELECT 2610,'Les Pontins','Les Pontins'
+--UNION SELECT 1617,'Tatroz','Tatroz'
+--UNION SELECT 1096,'Villette Lavaux','Villette Lavaux'
+--UNION SELECT 6383,'Wirzweli','Wirzweli'
+--UNION SELECT 2333,'La Cibourg','La Cibourg'
+--UNION SELECT 2616,'La Cibourg','La Cibourg'
+--UNION SELECT 8556,'Lamperswil TG','Lamperswil TG'
+--UNION SELECT 6039,'Root D4','Root D4'
+--UNION SELECT 2037,'Montezillon','Montezillon'
+--UNION SELECT 1820,'Territet','Territet'
+--UNION SELECT 3963,'Crans-Montana 1','Crans-Montana 1'
+--UNION SELECT 3963,'Crans-Montana 2','Crans-Montana 2'
+--UNION SELECT 6939,'Arosio-Mugena','Arosio-Mugena'
+--UNION SELECT 8253,'Diessenhofen Zust','Diessenhofen Zustellung'
+--UNION SELECT 2338,'Muriaux','Muriaux'
+--UNION SELECT 2748,'Les Ecorcheresses','Les Ecorcheresses'
+--UNION SELECT 6900,'Lugano MailSource','Lugano MailSource'
+--UNION SELECT 1162,'St-Prex Dist','St-Prex Distribution'
+--UNION SELECT 8615,'Freudwil','Freudwil'
+--UNION SELECT 6422,'Steinen Zustellung','Steinen Zustellung'
+--UNION SELECT 5415,'Nussbaumen AG Zust','Nussbaumen AG Zustellung'
+--UNION SELECT 3661,'Uetendorf Zust','Uetendorf Zustellung'
+--UNION SELECT 3770,'Zweisimmen Zust','Zweisimmen Zustellung'
+--UNION SELECT 1223,'Cologny Dist','Cologny Distribution'
+--UNION SELECT 1964,'Conthey Dist','Conthey Distribution'
+--UNION SELECT 3454,'Sumiswald Zust','Sumiswald Zustellung'
+--UNION SELECT 6710,'Biasca Dist','Biasca Distribuzione'
+--UNION SELECT 6963,'Pregassona Dist','Pregassona Distribuzione'
+--UNION SELECT 3920,'Zermatt Zustellung','Zermatt Zustellung'
+--UNION SELECT 1969,'Eison St-Martin','Eison St-Martin'
+--UNION SELECT 3977,'Granges VS Dist','Granges VS Distribution'
+--UNION SELECT 4034,'Basel 34 Breite','Basel 34 Breite'
+--UNION SELECT 3623,'Buchen BE','Buchen BE'
+--UNION SELECT 4588,'Brittern','Brittern'
+--UNION SELECT 4000,'Basel','Basel SPILOG'
+--UNION SELECT 9463,'Oberriet SG Zust','Oberriet SG Zustellung'
+--UNION SELECT 9113,'Degersheim Zust','Degersheim Zustellung'
+--UNION SELECT 8762,'Schwanden GL Zust','Schwanden GL Zustellung'
+--UNION SELECT 8472,'Seuzach Zustellung','Seuzach Zustellung'
+--UNION SELECT 5415,'Hertenstein AG','Hertenstein AG'
+--UNION SELECT 5415,'Rieden AG','Rieden AG'
+--UNION SELECT 9604,'Unterrindal','Unterrindal'
+--UNION SELECT 3071,'Ostermundigen Zust','Ostermundigen Zustellung'
+--UNION SELECT 2013,'Boudry Dist Ba','Boudry Dist Ba'
+--UNION SELECT 4033,'Basel','Basel 33 Novartis'
+--UNION SELECT 8902,'Urdorf Dist Ba','Urdorf Dist Ba'
+--UNION SELECT 3039,'Bern PF OC','Bern PF Operations Center'
+--UNION SELECT 4000,'Basel PF OC','Basel PF Operations Center'
+--UNION SELECT 3983,'Greich','Greich'
+--UNION SELECT 1816,'Chailly Dist','Chailly-Montreux Dist'
+--UNION SELECT 8240,'Thayngen Zust','Thayngen Zustellung'
+--UNION SELECT 3537,'Eggiwil Zustellung','Eggiwil Zustellung'
+--UNION SELECT 3715,'Adelboden Zust','Adelboden Zustellung'
+--UNION SELECT 3818,'Grindelwald Zust','Grindelwald Zustellung'
+--UNION SELECT 5242,'Birr-Lupfig Zust','Birr-Lupfig Zustellung'
+--UNION SELECT 5605,'Dottikon Zust','Dottikon Zustellung'
+--UNION SELECT 5703,'Seon Zustellung','Seon Zustellung'
+--UNION SELECT 5726,'Unterkulm Zust','Unterkulm Zustellung'
+--UNION SELECT 6023,'Rothenburg Zust','Rothenburg Zustellung'
+--UNION SELECT 6037,'Root Zustellung','Root Zustellung'
+--UNION SELECT 6043,'Adligenswil Zust','Adligenswil Zustellung'
+--UNION SELECT 6045,'Meggen Zustellung','Meggen Zustellung'
+--UNION SELECT 6055,'Alpnach Zustellung','Alpnach Zustellung'
+--UNION SELECT 6374,'Buochs Zustellung','Buochs Zustellung'
+--UNION SELECT 3071,'O''mundigen Dist Ba','Ostermundigen Distributions'
+--UNION SELECT 1347,'Le Sentier Dist','Le Sentier Distribution'
+--UNION SELECT 9494,'Schaan Zustellung','Schaan Zustellung'
+--UNION SELECT 8901,'Urdorf','Urdorf Tessi'
+--UNION SELECT 8450,'Andelfingen Zust','Andelfingen Zustellung'
+--UNION SELECT 2035,'Corcelles NE Dist','Corcelles NE Distribution'
+--UNION SELECT 3175,'Flamatt Zustellung','Flamatt Zustellung'
+--UNION SELECT 6017,'Ruswil Zustellung','Ruswil Zustellung'
+--UNION SELECT 6162,'Entlebuch Zust','Entlebuch Zustellung'
+--UNION SELECT 6182,'Escholzmatt Zust','Escholzmatt Zustellung'
+--UNION SELECT 8722,'Kaltbrunn Zust','Kaltbrunn Zustellung'
+--UNION SELECT 8494,'Bauma Zustellung','Bauma Zustellung'
+--UNION SELECT 6204,'Sempach Stadt','Sempach Stadt'
+--UNION SELECT 7078,'Lenzerheide Zust','Lenzerheide Zustellung'
+--UNION SELECT 3041,'Bern UBS','Bern UBS'
+--UNION SELECT 4000,'Basel','Basel UBS'
+--UNION SELECT 8107,'Buchs ZH Zust','Buchs ZH Zustellung'
+--UNION SELECT 8488,'Turbenthal Zust','Turbenthal Zustellung'
+--UNION SELECT 7050,'Arosa Zust','Arosa Zustellung'
+--UNION SELECT 9489,'Schaan Log','Schaan Log'
+--UNION SELECT 3256,'Seewil','Seewil'
+--UNION SELECT 1071,'Chexbres Dist','Chexbres Distribution'
+--UNION SELECT 1854,'Leysin Dist','Leysin Distribution'
+--UNION SELECT 8135,'Sihlwald','Sihlwald'
+--UNION SELECT 8152,'GlattparkOpfikon','Glattpark Opfikon'
+--UNION SELECT 5645,'Fenkrieden','Fenkrieden'
+--UNION SELECT 4000,'Basel','Basel'
+--UNION SELECT 9602,'Bazenheid Zust','Bazenheid Zustellung'
+--UNION SELECT 7430,'Thusis Zustellung','Thusis Zustellung'
+--UNION SELECT 7130,'Ilanz Zustellung','Ilanz Zustellung'
+--UNION SELECT 1926,'Fully Dist','Fully Distribution'
+--UNION SELECT 1296,'Coppet Dist','Coppet Distribution'
+--UNION SELECT 1782,'Formangueires','Formangueires'
+--UNION SELECT 7513,'Silvaplana-Surlej','Silvaplana-Surlej'
+--UNION SELECT 8543,'Gundetswil','Gundetswil'
+--UNION SELECT 4000,'Basel SPI GLS','Basel SPI GLS Retour'
+--UNION SELECT 3940,'Steg-Gampel','Steg-Gampel'
+--UNION SELECT 8109,'Kloster Fahr','Kloster Fahr'
+--UNION SELECT 1039,'Cheseaux Polyval','Cheseaux Polyval'
+--UNION SELECT 6346,'Baar 3','Baar 3'
+--UNION SELECT 6346,'Baar 3 Dist Ba','Baar 3 Dist Ba'
+--UNION SELECT 3085,'Wabern Weihnachten','Wabern 2 x Weihnachten'
+--UNION SELECT 8952,'Schlieren DS','Schlieren DocumentServices'
+--UNION SELECT 3050,'Bern DS','Bern DocumentServices'
+--UNION SELECT 6010,'Kriens LZB','Kriens Logistikzentrum'
+--UNION SELECT 6590,'Cadenazzo CLL','Cadenazzo Centro logistico'
+--UNION SELECT 9200,'Gossau SG LZB','Gossau SG Logistikzentrum'
+--UNION SELECT 4702,'Oensingen Hub','Oensingen Hub SecurePost'
+--UNION SELECT 9494,'Schaan BZ','Schaan Betriebszentrum'
+--UNION SELECT 1148,'La Coudre','La Coudre'
+--UNION SELECT 1919,'Martigny Mutuel','Martigny Groupe Mutuel'
+--UNION SELECT 1001,'Lausanne Sozialb.','Lausanne Sozialberatung'
+--UNION SELECT 1700,'Fribourg PF Fil.','Fribourg PostFinance Fil.'
+--UNION SELECT 4808,'Zofingen PF','Zofingen PostFinance'
+--UNION SELECT 4800,'Zofingen PFinance','Zofingen PostFinance'
+--UNION SELECT 3400,'Burgdorf Filiale','Burgdorf Filiale'
+--UNION SELECT 4807,'Zofingen PF','Zofingen PostFinance'
+--UNION SELECT 8352,'Ricketwil','Ricketwil Winterthur'
+--UNION SELECT 4310,'Rheinfelden SPI','Rheinfelden SPI Logistics A'
+--UNION SELECT 4133,'Pratteln SPI','Pratteln SPI Logistics'
+--UNION SELECT 4809,'Zofingen PF','Zofingen Postfinance UBS'
+--UNION SELECT 3400,'Burgdorf PF mob','Burgdorf PostFinance mob'
+--UNION SELECT 4800,'Zofingen PF UBS','Zofingen PF UBS Verarb.'
+--UNION SELECT 8545,'Rickenbach Sulz','Rickenbach Sulz'
+--UNION SELECT 8543,'Kefikon ZH','Kefikon ZH'
+--UNION SELECT 8310,'Grafstal','Grafstal'
+--UNION SELECT 8465,'Wildensbuch','Wildensbuch'
+--UNION SELECT 3017,'Bern Zustellung','Bern Zustellung'
+--UNION SELECT 9494,'Schaan BZ GKS','Schaan BZ GKS'
+--UNION SELECT 9301,'Wittenbach','Wittenbach'
+--UNION SELECT 8412,'Riet Neftenbach','Riet Neftenbach'
+--UNION SELECT 6511,'Cadenazzo SC','Cadenazzo Scanning-Center'
+--UNION SELECT 5643,'Meienberg','Meienberg'
+--UNION SELECT 3823,'Kleine Scheidegg','Kleine Scheidegg'
+--UNION SELECT 3823,'Eigergletscher','Eigergletscher'
+--UNION SELECT 3029,'Bern','Bern'
+--UNION SELECT 8200,'Schaffhausen PF','Schaffhausen PF'
+--UNION SELECT 9050,'Appenzell Eggerst.','Appenzell Eggerstanden'
+--UNION SELECT 9050,'Appenzell Steinegg','Appenzell Steinegg'
+--UNION SELECT 9050,'Appenzell Schlatt','Appenzell Schlatt'
+--UNION SELECT 9057,'Wasserauen','Wasserauen'
+--UNION SELECT 9108,'Gontenbad','Gontenbad'
+--UNION SELECT 6000,'Luzern PF Fil','Luzern PF Fil'
+--UNION SELECT 9108,'Jakobsbad','Jakobsbad'
+--UNION SELECT 7110,'Peiden','Peiden'
+--UNION SELECT 6595,'Riazzino Dist','Riazzino Distribuzione'
+--UNION SELECT 6987,'Caslano Dist','Caslano Distribuzione'
+--UNION SELECT 6593,'Cadenazzo Dist','Cadenazzo Distribuzione'
+--UNION SELECT 1356,'La Russille','La Russille'
+--UNION SELECT 8307,'Effretikon PAG','Effretikon PostAuto AG'
+--UNION SELECT 9245,'Sonnental','Sonnental'
+--UNION SELECT 4310,'Rheinfelden PAuto','Rheinfelden PostAuto AG'
+--UNION SELECT 2802,'Develier PostAuto','Develier PostAuto AG'
+--UNION SELECT 2340,'Le Noirmont Dist','Le Noirmont Distribution'
+--UNION SELECT 3206,'Ferenbalm','Ferenbalm'
+--UNION SELECT 3206,'Biberen','Biberen'
+--UNION SELECT 3206,'Gammen','Gammen'
+--UNION SELECT 4800,'Zofingen B&V GK','Zofingen B&V GK'
+--UNION SELECT 8852,'Altendorf B&V GK 2','Altendorf B&V GK 2'
+--UNION SELECT 2362,'Montfaucon','Montfaucon'
+--UNION SELECT 2362,'Montfavergier','Montfavergier'
+--UNION SELECT 2363,'Les Enfers','Les Enfers'
+--UNION SELECT 2364,'St-Brais','St-Brais'
+--UNION SELECT 3030,'Bern KC PK 5','Bern KC PK 5'
+--UNION SELECT 6010,'Kriens KC PGGK2','Kriens KC PG/GK 2'
+--UNION SELECT 4600,'Olten Personal','Olten Personal'
+--UNION SELECT 1001,'Lausanne PF331-140','Lausanne PF 331-140'
+--UNION SELECT 1001,'Lausanne Jurassien','Lausanne Arc Jurassien'
+--UNION SELECT 4800,'Zofi. KC PKGK 3','Zofingen KC PK/GK 3'
+--UNION SELECT 9030,'St. Josefen','St. Josefen'
+--UNION SELECT 8723,'Maseltrangen','Maseltrangen'
+--UNION SELECT 3434,'Landiswil','Landiswil'
+--UNION SELECT 8970,'Urdorf Exchange','Urdorf Exchange'
+--UNION SELECT 1984,'La Tour VS','La Tour VS'
+--UNION SELECT 1985,'La Forclaz VS','La Forclaz VS'
+--UNION SELECT 1401,'Yverdon Conseil','Yverdon Conseil et vente'
+--UNION SELECT 3071,'Ostermundigen KATA','Ostermundigen KATA'
+--UNION SELECT 5412,'Vogelsang AG','Vogelsang AG'
+--UNION SELECT 8645,'Jona Buech Gewerbe','Jona Buech Gewerbe'
+--UNION SELECT 1997,'Sornard Nendaz','Sornard Nendaz'
+--UNION SELECT 9533,'Dietschwil','Dietschwil'
+--UNION SELECT 8332,'Rumlikon','Rumlikon'
+--UNION SELECT 8371,'Busswil TG','Busswil TG'
+--UNION SELECT 3930,'Visp Verkauf','Visp Verkaufssupport'
+--UNION SELECT 4800,'Zofi. KC PKGK4','Zofingen KC PK/GK 4'
+--UNION SELECT 6023,'Rothenburg DIST BA','Rothenburg DIST BA'
+--UNION SELECT 4800,'Zofi. KC PKGK 5','Zofingen KC PK/GK 5'
+--UNION SELECT 3072,'Ostermundigen Ober','Ostermundigen Oberdorf'
+--UNION SELECT 7212,'Seewis-Pardisla','Seewis-Pardisla'
+--UNION SELECT 7212,'Seewis-Schmitten','Seewis-Schmitten'
+--UNION SELECT 8212,'Neuhausen Rundbuck','Neuhausen Rundbuck'
+--UNION SELECT 9023,'St. Gallen','St. Gallen'
+--UNION SELECT 4144,'Arlesheim Hub','Arlesheim Postlogistics Hub'
+--UNION SELECT 4800,'Zofingen KC PK 2','Zofingen KC PK 2'
+--UNION SELECT 5000,'Aarau Altstadt','Aarau Altstadt'
+--UNION SELECT 1000,'Lausanne 10','Lausanne 10'
+--UNION SELECT 1000,'Lausanne 18','Lausanne 18'
+--UNION SELECT 3075,'Vielbringen Worb','Vielbringen b. Worb'
+--UNION SELECT 1800,'Vevey Orient','Vevey Orient'
+--UNION SELECT 6000,'Luzern Altstadt','Luzern Altstadt'
+--UNION SELECT 8574,'Lengwil','Lengwil'
+--UNION SELECT 8574,'Dettighofen Lengw.','Dettighofen Lengwil'
+--UNION SELECT 1880,'Les Posses-sur-Bex','Les Posses-sur-Bex'
+--UNION SELECT 6590,'Cadenazzo CLL AP','Cadenazzo CLL AP'
+--UNION SELECT 9200,'Gossau SG LZB FP','Gossau SG LZB FP'
+--UNION SELECT 1953,'Sion RZ','Sion RZ'
+--UNION SELECT 8155,'Nassenwil','Nassenwil'
+--UNION SELECT 4800,'Zofingen Abg. St','Zofingen Abg. St'
+--UNION SELECT 1580,'Donatyre','Donatyre'
+--UNION SELECT 1721,'Cournillens','Cournillens'
+--UNION SELECT 3961,'Mission','Mission'
+--UNION SELECT 4600,'Olten 4 Hammer','Olten 4 Hammer'
+--UNION SELECT 1310,'Daillens PL3','Daillens PL3'
+--UNION SELECT 3030,'Bern PL3','Bern PL3'
+--UNION SELECT 4133,'Pratteln PL3','Pratteln PL3'
+--UNION SELECT 4704,'Niederbipp PL3','Niederbipp PL3'
+--UNION SELECT 5606,'Dintikon PL3','Dintikon PL3'
+--UNION SELECT 5612,'Villmergen PL3','Villmergen PL3'
+--UNION SELECT 6593,'Cadenazzo PL3','Cadenazzo PL3'
+--UNION SELECT 8422,'Pfungen PL3','Pfungen PL3'
+--UNION SELECT 8902,'Urdorf PL3','Urdorf PL3'
+--UNION SELECT 2305,'La Chaux-de-Fonds','La Chaux-de-Fonds'
+--UNION SELECT 6010,'Kriens ContCent','Kriens Contact Center'
+--UNION SELECT 8580,'Biessenhofen','Biessenhofen'
+--UNION SELECT 1232,'Confignon Cressy','Confignon Cressy'
+--UNION SELECT 4028,'Basel','Basel'
+--UNION SELECT 6203,'Sempach Bahnhof GK','Sempach Bahnhof GK'
+--UNION SELECT 8509,'Frauenfeld','Frauenfeld'
+--UNION SELECT 8970,'Urdorf Exchange PL','Urdorf Exchange PL'
+--UNION SELECT 3000,'Bern PAS','Bern PAS'
+--UNION SELECT 5313,'Klingnau Wiesenweg','Klingnau Wiesenweg'
+--UNION SELECT 8953,'Dietikon Silbern','Dietikon Silbern'
+--UNION SELECT 6875,'Campora','Campora'
+--UNION SELECT 6130,'Willisau Rotmatt','Willisau Rotmatt'
+--UNION SELECT 8403,'Winterthur','Winterthur'
+--UNION SELECT 5004,'Aarau Tellistr','Aarau Tellistrasse'
+--UNION SELECT 6242,'Wauwil Dorfstrasse','Wauwil Dorfstrasse'
+--UNION SELECT 8411,'Winterthur Pflanz.','Winterthur Pflanzschulstr'
+--UNION SELECT 9423,'Altenrhein Dorfstr','Altenrhein Dorfstrasse'
+--UNION SELECT 1211,'Genf SPS','Genf SPS'
+--UNION SELECT 3001,'Bern SPS','Bern SPS'
+--UNION SELECT 4002,'Basel SPS','Basel SPS'
+--UNION SELECT 5001,'Aarau SPS','Aarau SPS'
+--UNION SELECT 6002,'Luzern SPS','Luzern SPS'
+--UNION SELECT 6301,'Zug SPS','Zug SPS'
+--UNION SELECT 6501,'Bellinzona SPS','Bellinzona SPS'
+--UNION SELECT 6601,'Locarno SPS','Locarno SPS'
+--UNION SELECT 6830,'Chiasso SPS','Chiasso SPS'
+--UNION SELECT 6901,'Lugano SPS','Lugano SPS'
+--UNION SELECT 5463,'Wislikofen Probst.','Wislikofen Probsteiweg'
+--UNION SELECT 8404,'Winterthur im LInk','Winterthur im LInk'
+--UNION SELECT 8620,'Wetzikon Kastell','Wetzikon Kastellstrasse'
+--UNION SELECT 9494,'Schaan IMPC','Schaan IMPC'
+--UNION SELECT 1305,'Penthalaz Dist','Penthalaz Distribution'
+--UNION SELECT 3000,'Bern 1 PostParc','Bern 1 PostParc'
+--UNION SELECT 9442,'Berneck Zust','Berneck Zustellung'
+--UNION SELECT 8500,'Frauenfeld Murgstr','Frauenfeld Murgstrasse'
+--UNION SELECT 9524,'Zuzwil SG Gewerbe','Zuzwil SG Gewerbestrasse'
+--UNION SELECT 6300,'Zug','Zug'
+--UNION SELECT 6960,'Odogno','Odogno'
+--UNION SELECT 3802,'Interlaken Ost','Interlaken Ost'
+--UNION SELECT 8489,'Schalchen','Schalchen'
+--UNION SELECT 8489,'Ehrikon','Ehrikon'
+--UNION SELECT 3000,'Bern Finform','Bern Finform'
+--UNION SELECT 7500,'St. Moritz Dorf','St. Moritz Dorf'
+--UNION SELECT 3613,'Steffisburg a.B.','Steffisburg alte Bernstr'
+--UNION SELECT 9320,'Arbon Stickereistr','Arbon Stickereistrasse'
+--UNION SELECT 8620,'Wetzikon Post','Wetzikon Poststrasse'
+--UNION SELECT 6032,'Emmen Seetalstr','Emmen Seetalstrasse'
+--UNION SELECT 8370,'Sirnach Dist Ba','Sirnach Distributionsbasis'
+--UNION SELECT 7304,'Maienfeld Stutz','Maienfeld Stutz'
+--UNION SELECT 7606,'Bondo','Bondo'
+--UNION SELECT 6330,'Cham Hinterbergstr','Cham Hinterbergstrasse'
+--UNION SELECT 8253,'Diessenhofen Bahn','Diessenhofen Bahnhofstrasse'
+--UNION SELECT 9443,'Widnau Industrie','Widnau Industriestrasse'
+--UNION SELECT 8370,'Sirnach Zust','Sirnach Zustellung'
+--UNION SELECT 6616,'Losone via Locarno','Losone via Locarno'
+--UNION SELECT 9494,'Schaan BZ Annahme','Schaan BZ Annahme'
+--UNION SELECT 8301,'Glattzentrum N.W.','Glattzentrum N. Wint.str.'
+--UNION SELECT 8352,'Elsau St. Gallers.','Elsau St. Gallerstrasse'
+--UNION SELECT 3052,'Zollikofen Waldstr','Zollikofen Waldstrasse'
+--UNION SELECT 6010,'Kriens Luzernerstr','Kriens Luzernerstrasse'
+--UNION SELECT 6998,'Monteggio','Monteggio'
+--UNION SELECT 6998,'Monteggio 2','Monteggio 2'
+--UNION SELECT 6030,'Ebikon Mall Switz.','Ebikon Mall of Switzerland'
+--UNION SELECT 6048,'Horw Gemeindehaus','Horw Gemeindehausplatz'
+--UNION SELECT 6370,'Stans Bahnhofplatz','Stans Bahnhofplatz'
+--UNION SELECT 8603,'Schwerzenbach Bahn','Schwerzenbach Bahnstrasse'
+--UNION SELECT 8604,'Volketswil Zentrum','Volketswil Zentrum'
+--UNION SELECT 8354,'Dickbuch','Dickbuch'
+--UNION SELECT 4450,'Sissach Postgasse','Sissach Postgasse'
+--UNION SELECT 1870,'Monthey Ave gare','Monthey Avenue de la gare'
+--UNION SELECT 4665,'Oftringen LS ThC','Oftringen LS ThermoCare'
+--UNION SELECT 4702,'Oensingen Soloth.','Oensingen Solothurnstrasse'
+--UNION SELECT 8424,'Embrach Dorfstr','Embrach Dorfstrasse'
+--UNION SELECT 7000,'Chur Postplatz','Chur Postplatz'
+--UNION SELECT 4605,'Olten','Olten'
+--UNION SELECT 5200,'Brugg AG Bahnhof','Brugg AG Bahnhofstrasse'
+--UNION SELECT 3963,'Crans-sur-Sierre','Crans-sur-Sierre'
+--UNION SELECT 3645,'Gwatt Lohnerstr','Gwatt Thun Lohnerstrasse'
+--UNION SELECT 5330,'Bad Zurzach Haupt.','Bad Zurzach Hauptstrasse'
+--UNION SELECT 3250,'Lyss Werkstrasse','Lyss Werkstrasse'
+--UNION SELECT 6548,'Sta. Domenica','Sta. Domenica'
+--UNION SELECT 3040,'Bern BPMP','Bern BPMP'
+--UNION SELECT 3000,'Bern Lorraine','Bern Lorraine'
+--UNION SELECT 6591,'Cadenazzo CPR','Cadenazzo CPR'
+--UNION SELECT 6591,'Cadenazzo Spart P','Cadenazzo Spartizione P'
+--UNION SELECT 6530,'Cadenazzo CALL','Cadenazzo CALL'
+--UNION SELECT 8203,'Schaffh. Buchthal.','Schaffhausen Buchthalen'
+--UNION SELECT 4127,'Birsfelden Haupt.','Birsfelden Hauptstrasse'
+--UNION SELECT 4144,'Arlesheim Postpl.','Arlesheim Postplatz'
+--UNION SELECT 6033,'Buchrain Schiltw.','Buchrain Schiltwald'
+--UNION SELECT 3400,'Burgdorf Bahnhof','Burgdorf Bahnhofstrasse'
+--UNION SELECT 6814,'Lamone-Cad. Cant.','Lamone-Cadempino via Cant.'
+--UNION SELECT 4852,'Rothrist Bernstr.','Rothrist Bernstrasse'
+--UNION SELECT 6340,'Baar Dorfstrasse','Baar Dorfstrasse'
+--UNION SELECT 6130,'Willisau Dist Hub','Willisau Dist Hub'
+--UNION SELECT 6280,'Hochdorf Hauptstr','Hochdorf Hauptstrasse'
+--UNION SELECT 9500,'Wil SG Hubstrasse','Wil SG Hubstrasse'
+--UNION SELECT 2560,'Nidau Weyermatt','Nidau Weyermattstrasse'
+--UNION SELECT 2074,'Marin-Epagnier Lys','Marin-Epagnier Fleur de Lys'
+--UNION SELECT 3600,'Thun Aarestrasse','Thun Aarestrasse'
+--UNION SELECT 7200,'Untervaz Sort.','Untervaz Sortierung'
+--UNION SELECT 7200,'Untervaz RPZ','Untervaz RPZ'
+--UNION SELECT 7210,'Untervaz CIRCLE','Untervaz CIRCLE'
+--UNION SELECT 7230,'Untervaz CALL','Untervaz CALL'
+--UNION SELECT 1630,'Bulle Moulin','Bulle rue du Moulin'
+--UNION SELECT 2500,'Biel/Bienne B/G GK','Biel/Bienne Bahnhof/Gare GK'
+--UNION SELECT 3080,'Ostermundigen CIRC','Ostermundigen CIRCLE'
+--UNION SELECT 3090,'Ostermundigen CALL','Ostermundigen CALL'
+--UNION SELECT 3071,'Ostermundigen Sort','Ostermundigen Sortierung'
+--UNION SELECT 3018,'Bern Freiburgstr','Bern Freiburgstrasse'
+--UNION SELECT 6043,'Adligenswil Ebik.','Adligenswil Ebikonerstrasse'
+--UNION SELECT 1630,'Bulle Gare TPF','Bulle Gare TPF'
+--UNION SELECT 8310,'Kemptthal Kemptp.','Kemptthal Kemptpark'
+--UNION SELECT 4147,'Aesch BL Hauptstr','Aesch BL Hauptstrasse'
+--UNION SELECT 4153,'Reinach BL Austr','Reinach BL Austrasse'
+--UNION SELECT 5600,'Lenzburg Muracker','Lenzburg Murackerstrasse'
+--UNION SELECT 5070,'Frick Widenplatz','Frick Widenplatz'
+--UNION SELECT 6883,'Novazzano Via P.B.','Novazzano Via P. Bernasconi'
+--UNION SELECT 1400,'Yverdon Ch-Lovats','Yverdon-les-Bains Ch-Lovats'
+--UNION SELECT 2500,'Biel/Bienne Rennw.','Biel/Bienne Rennweg'
+--UNION SELECT 5630,'Muri AG Seetalstr.','Muri AG Seetalstrasse'
+--UNION SELECT 6210,'Sursee Schellenr.','Sursee Schellenrain'
+--UNION SELECT 5430,'Wettingen Bahnhof','Wettingen Bahnhof'
+--UNION SELECT 4123,'Allschwil Basler','Allschwil Baslerstrasse'
+--UNION SELECT 4133,'Pratteln Bahnhofst','Pratteln Bahnhofstrasse'
+--UNION SELECT 5430,'Wettingen Seminar','Wettingen Seminarstrasse'
+--UNION SELECT 8134,'Adliswil Poststr','Adliswil Poststrasse'
+--UNION SELECT 8636,'Wald ZH Poststr','Wald ZH Poststrasse'
+--UNION SELECT 1310,'Daillens SPS','Daillens SPS'
+--UNION SELECT 3360,'Herzogenbuchs. Lag','Herzogenbuchsee Lagerstr'
+--UNION SELECT 4810,'Zofingen PF','Zofingen PF'
+--UNION SELECT 1920,'Martigny rue Avou.','Martigny rue des Avouillons'
+--UNION SELECT 6593,'Cadenazzo ZF','Cadenazzo Fundstelle'
+--UNION SELECT 9494,'Schaan Paketzust.','Schaan Paketzustellung'
+--UNION SELECT 8940,'Urdorf CIRCLE','Urdorf CIRCLE'
+--UNION SELECT 8930,'Urdorf CALL','Urdorf CALL'
+--UNION SELECT 8920,'Urdorf PZ','Urdorf Paketzentrum'
+--UNION SELECT 4528,'Zuchwil Hauptstr','Zuchwil Hauptstrasse'
+--UNION SELECT 4133,'Pratteln RPZ','Pratteln RPZ'
+--UNION SELECT 9472,'Grabs Staatsstr','Grabs Staatsstrasse'
+--UNION SELECT 5615,'Fahrwangen Hinterg','Fahrwangen Hintergasse'
+--UNION SELECT 4800,'Zofingen U. Graben','Zofingen Untere Grabenstr'
+--UNION SELECT 4600,'Olten Bahnhofstr','Olten Bahnhofstrasse'
+--UNION SELECT 4132,'Muttenz Hauptstr','Muttenz Hauptstrasse'
+--UNION SELECT 3063,'Ittigen Talgut-Z.','Ittigen Talgut-Zentrum'
+--UNION SELECT 1023,'Crissier Chisaz','Crissier Chemin de Chisaz'
+--UNION SELECT 1110,'Morges Charpent.','Morges Rue des Charpentiers'
+--UNION SELECT 6102,'Malters Luzernstr','Malters Luzernstrasse'
+--UNION SELECT 4415,'Lausen Grammontstr','Lausen Grammontstrasse'
+--UNION SELECT 3015,'Bern Weltpoststr','Bern Weltpoststrasse'
+--UNION SELECT 8302,'Kloten Bahnhofstr','Kloten Bahnhofstrasse'
+--UNION SELECT 4665,'Oftringen Tychb.','Oftringen Tychboden'
+--UNION SELECT 8152,'Glattbrugg Schaff.','Glattbrugg Schaffhauserstr'
+--UNION SELECT 6030,'Ebikon Riedmattstr','Ebikon Riedmattstrasse'
+--UNION SELECT 3752,'Wimmis Herrenmatte','Wimmis Herrenmattestr'
+--UNION SELECT 8810,'Horgen Bahnhofstr','Horgen Bahnhofstrasse'
+--UNION SELECT 6675,'Cevio Dist','Cevio Distribuzione'
+--UNION SELECT 3902,'Glis Gliserallee','Glis Gliserallee'
+--UNION SELECT 3380,'Wangen B''hofallee','Wangen a.d.A. Bahnhofallee'
+--UNION SELECT 6003,'Luzern Hirschengr','Luzern Hirschengraben'
+--UNION SELECT 1228,'Plan-les-Oua Pl. A','Plan-les-Ouates Place des A'
+--UNION SELECT 4057,'Basel Hochberger','Basel Hochbergerstrasse'
+--UNION SELECT 6981,'Beride d. Bedigli.','Beride di Bedigliora'
+--UNION SELECT 7526,'Chapella','Chapella'
+--UNION SELECT 1440,'Montagny-Ch. Cham.','Montagny-Chamard En Chamard'
+--UNION SELECT 5103,'Wildegg Poststr','Wildegg Poststrasse'
+--UNION SELECT 4914,'Roggwil BE Dorfstr','Roggwil BE Dorfstrasse'
+--UNION SELECT 9021,'St. Gallen MS','St. Gallen MS'
+--UNION SELECT 8840,'Einsiedeln Bhfpl.','Einsiedeln Bahnhofplatz'
+--UNION SELECT 4802,'Strengelbach D.Hub','Strengelbach Dist Hub'
+--UNION SELECT 4036,'Basel CALL','Basel CALL'
+--UNION SELECT 4014,'Basel CIRCLE','Basel CIRCLE'
+--UNION SELECT 1844,'Villeneuve VD C.S.','Villeneuve VD Ave C.d.S.'
+--UNION SELECT 4125,'Riehen Bahnhofstr','Riehen Bahnhofstrasse'
+--UNION SELECT 7270,'Davos Platz Talstr','Davos Platz Talstrasse'
+--UNION SELECT 1180,'Rolle Ch. Famolens','Rolle Chemin du Famolens'
+--UNION SELECT 4104,'Oberwil BL Konsum.','Oberwil BL Konsumstrasse'
+--UNION SELECT 5612,'Villmergen Grenzw.','Villmergen Grenzweg'
+--UNION SELECT 6043,'Adligenswil D.Hub','Adligenswil Dist Hub'
+--UNION SELECT 8910,'Affoltern Obfelder','Affoltern am Albis Obfelder'
+--UNION SELECT 4009,'Basel Ahornstrasse','Basel Ahornstrasse'
+--UNION SELECT 8215,'Hallau Neunkirch.','Hallau Neunkircherstrasse'
+--UNION SELECT 4503,'Solothurn Allmend','Solothurn Allmendstrasse'
+--UNION SELECT 5033,'Buchs AG RPZ','Buchs AG RPZ'
+--UNION SELECT 5050,'Buchs AG CALL','Buchs AG CALL'
+--UNION SELECT 5030,'Buchs AG Sort','Buchs AG Sortierung'
+--UNION SELECT 5060,'Buchs AG CIRCLE','Buchs AG CIRCLE'
+--UNION SELECT 4130,'Pratteln CALL','Pratteln CALL'
+--UNION SELECT 4134,'Pratteln Sort','Pratteln Sortierung'
+--UNION SELECT 3550,'Langnau i. E.Bahn','Langnau i. E. Bahnhofstr'
+--UNION SELECT 8870,'Niederurnen PF','Niederurnen PF'
+--UNION SELECT 4001,'Basel Freie Str','Basel Freie Strasse'
+--UNION SELECT 1026,'Echandens-D. Lonay','Echandens-Denges Rte Lonay'
+--UNION SELECT 6850,'Mendrisio V.S:F.','Mendrisio Staz St.Franscini'
+--UNION SELECT 1214,'Vernier r. Village','Vernier rue du Village'
+--UNION SELECT 1227,'Les Acacias R.G.L','Les Acacias Rte Grand-Lancy'
+--UNION SELECT 6005,'Luzern Frohburgstr','Luzern Frohburgstrasse'
+--UNION SELECT 1030,'Bussigny Industrie','Bussigny rue de l''Industrie'
+--UNION SELECT 8300,'Wallisellen Sort','Wallisellen Sort'
+--UNION SELECT 8304,'Wallisellen RPZ','Wallisellen RPZ'
+--UNION SELECT 8350,'Wallisellen CALL','Wallisellen CALL'
+--UNION SELECT 8326,'Wallisellen CIRCLE','Wallisellen CIRCLE'
+--UNION SELECT 3960,'Sierre Rue Falcon','Sierre Rue de l''Ile Falcon'
+--UNION SELECT 4089,'Basel ZollNoData','Basel ZollNoData'
+--UNION SELECT 4089,'Basel ZollGesperrt','Basel ZollGesperrt'
+--UNION SELECT 4089,'Basel ZollBeschau','Basel ZollBeschau'
+--UNION SELECT 4089,'Basel ZollExtern','Basel ZollExtern'
+--UNION SELECT 6210,'Sursee Wassergrabe','Sursee Wassergrabe'
+--UNION SELECT 3123,'Belp Rubigenstr','Belp Rubigenstrasse'
+--UNION SELECT 6131,'Willisau Competec','Willisau Competec'
+--UNION SELECT 1095,'Lutry Route Lavaux','Lutry Route de Lavaux'
+--UNION SELECT 2540,'Grenchen Maienstr.','Grenchen Maienstrasse'
+--UNION SELECT 1950,'Sion rue Casernes','Sion rue des Casernes'
+--UNION SELECT 1860,'Aigle Chem. Orlons','Aigle Chemin des Orlons'
+--UNION SELECT 8706,'Meilen Dorfstrasse','Meilen Dorfstrasse'
+--UNION SELECT 6517,'Arbedo Dist.','Arbedo Distribuzione'
+--UNION SELECT 6852,'Genestrerio Dist.','Genestrerio Distribuzione'
+--UNION SELECT 6916,'Grancia Dist.','Grancia Distribuzione'
+--UNION SELECT 4133,'Pratteln Hohenrain','Pratteln Hohenrainstrasse'
+--UNION SELECT 1680,'Romont FR AncFerme','Romont FR Rte Anc. Ferme'
+--UNION SELECT 1242,'Satigny Aire Ville','Satigny Rte d''Aire-la-Ville'
+--UNION SELECT 6010,'Kriens Zust Pakete','Kriens Zustellung Pakete'
+--UNION SELECT 5503,'Schafisheim Coop','Schafisheim Coop Verteilz.'
+--UNION SELECT 2544,'Bettlach Zust','Bettlach Zustellung'
+--UNION SELECT 3937,'SAB Baltschieder','SAB Baltschieder'
+--UNION SELECT 7320,'Sargans Langgraben','Sargans Langgrabenstrasse'
+--UNION SELECT 9200,'Gossau SG Zust P','Gossau SG Zustellung Pakete'
diff --git a/OCTPDBA-380 - data masker/restore all.sql b/OCTPDBA-380 - data masker/restore all.sql
new file mode 100644
index 0000000..a1da29a
--- /dev/null
+++ b/OCTPDBA-380 - data masker/restore all.sql
@@ -0,0 +1,54 @@
+USE master
+
+EXEC sandbox.dbo.setMasterIdentity @in_type = 'phcy' -- varchar(10)
+--EXEC sandbox.dbo.setMasterIdentity @in_type = 'adrRef' -- varchar(10)
+
+ALTER DATABASE [ArizonaREP] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
+RESTORE DATABASE [ArizonaREP] FROM DISK = N'D:\backups\ama adr ref N1\ArizonaREP_Dump.bak' WITH FILE = 1, MOVE N'ArizonaREP_Data' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ArizonaREP.mdf', MOVE N'ArizonaREP_Log' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ArizonaREP_1.ldf', NOUNLOAD, REPLACE, STATS = 5
+ALTER DATABASE [ArizonaREP] SET MULTI_USER WITH ROLLBACK IMMEDIATE;
+GO
+ALTER DATABASE [ArizonaREP] SET RECOVERY SIMPLE
+GO
+
+ALTER DATABASE Arizona SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
+RESTORE DATABASE [Arizona] FROM DISK = N'D:\backups\ama705\Arizona_Dump.bak' WITH FILE = 1, MOVE N'Arizona_Data' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\Arizona.mdf', MOVE N'Arizona_Log' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\Arizona_1.ldf', MOVE N'Arizona_FSData' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\Arizona_FSData', NOUNLOAD, REPLACE, STATS = 5
+ALTER DATABASE Arizona SET MULTI_USER WITH ROLLBACK IMMEDIATE;
+GO
+ALTER DATABASE [Arizona] SET RECOVERY SIMPLE
+GO
+
+RESTORE DATABASE [ArizonaCASH] FROM DISK = N'D:\backups\ama705\ArizonaCASH_Dump.bak' WITH FILE = 1, MOVE N'ArizonaCASH_Data' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ArizonaCASH.mdf', MOVE N'ArizonaCASH_Log' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ArizonaCASH_log.ldf', NOUNLOAD, REPLACE, STATS = 5
+GO
+ALTER DATABASE [ArizonaCASH] SET RECOVERY SIMPLE
+GO
+
+RESTORE DATABASE [ActivePos_read] FROM DISK = N'D:\backups\ama705\ActivePos_read_Dump.bak' WITH FILE = 1, MOVE N'ActivePos_read_Data' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActivePos_read.mdf', MOVE N'ActivePos_read_Log' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActivePos_read_log.ldf', NOUNLOAD, REPLACE, STATS = 5
+GO
+ALTER DATABASE [ActivePos_read] SET RECOVERY SIMPLE
+GO
+
+RESTORE DATABASE [ActivePos_server] FROM DISK = N'D:\backups\ama705\ActivePos_server_Dump.bak' WITH FILE = 1, MOVE N'ActivePos_server_Data' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActivePos_server.mdf', MOVE N'ActivePos_server_Log' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActivePos_server_1.ldf', NOUNLOAD, REPLACE, STATS = 5
+GO
+ALTER DATABASE [ActivePos_server] SET RECOVERY SIMPLE
+GO
+
+RESTORE DATABASE [ActivePos_write] FROM DISK = N'D:\backups\ama705\ActivePos_write_Dump.bak' WITH FILE = 1, MOVE N'ActivePos_write_Data' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActivePos_write.mdf', MOVE N'ActivePos_write_Log' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActivePos_write_1.ldf', NOUNLOAD, REPLACE, STATS = 5
+GO
+ALTER DATABASE [ActivePos_write] SET RECOVERY SIMPLE
+GO
+
+RESTORE DATABASE [ActiveSystemClient] FROM DISK = N'D:\backups\ama705\ActiveSystemClient_Dump.bak' WITH FILE = 1, MOVE N'ActiveSystemClient_Data' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActiveSystemClient.mdf', MOVE N'ActiveSystemClient_Log' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActiveSystemClient_1.ldf', NOUNLOAD, REPLACE, STATS = 5
+GO
+ALTER DATABASE [ActiveSystemClient] SET RECOVERY SIMPLE
+GO
+
+RESTORE DATABASE [ActiveSystemServer] FROM DISK = N'D:\backups\ama705\ActiveSystemServer_Dump.bak' WITH FILE = 1, MOVE N'ActiveSystemServer_Data' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActiveSystemServer.mdf', MOVE N'ActiveSystemServer_Log' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\ActiveSystemServer_1.ldf', NOUNLOAD, REPLACE, STATS = 5
+GO
+ALTER DATABASE [ActiveSystemServer] SET RECOVERY SIMPLE
+GO
+
+RESTORE DATABASE [HCITools] FROM DISK = N'D:\backups\ama705\HCITools_Dump.bak' WITH FILE = 1, MOVE N'HCI_tools' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\HCITools.mdf', MOVE N'HCI_tools_log' TO N'D:\sql\MSSQL15.MSSQLSERVER\MSSQL\DATA\HCITools_1.ldf', NOUNLOAD, REPLACE, STATS = 5
+GO
+ALTER DATABASE [HCITools] SET RECOVERY SIMPLE
+GO
+
diff --git a/OCTPDBA-380 - data masker/temp idx.sql b/OCTPDBA-380 - data masker/temp idx.sql
new file mode 100644
index 0000000..94c8ae0
--- /dev/null
+++ b/OCTPDBA-380 - data masker/temp idx.sql
@@ -0,0 +1,14 @@
+/*
+Missing Index Details from check before phcy.sql - (local).Arizona (CENTRALINFRA\ua208700 (66))
+The Query Processor estimates that implementing the following index could improve the query cost by 10.9728%.
+*/
+
+
+USE [Arizona]
+GO
+IF INDEXPROPERTY(OBJECT_ID('address'), 'ncix_address_COL_AD_sex' , 'IndexID' ) IS NOT NULL BEGIN;
+ CREATE NONCLUSTERED INDEX ncix_address_COL_AD_sex
+ ON [dbo].[Address] ([AD_sex])
+ INCLUDE ([Address_ID],[AD_name],[AD_first_name],[AD_middle_name],[AD_last_name],[AD_address_1],[AD_address_2],[AD_address_3])
+END;
+
diff --git a/OCTPDBA-414 - proc to align indexes/.vs/COTPDBA-414 - proc to align indexes/v15/.ssms_suo b/OCTPDBA-414 - proc to align indexes/.vs/COTPDBA-414 - proc to align indexes/v15/.ssms_suo
new file mode 100644
index 0000000..763f741
Binary files /dev/null and b/OCTPDBA-414 - proc to align indexes/.vs/COTPDBA-414 - proc to align indexes/v15/.ssms_suo differ
diff --git a/OCTPDBA-414 - proc to align indexes/.vs/OCTPDBA-414 - proc to align indexes/v15/.ssms_suo b/OCTPDBA-414 - proc to align indexes/.vs/OCTPDBA-414 - proc to align indexes/v15/.ssms_suo
new file mode 100644
index 0000000..bc3af92
Binary files /dev/null and b/OCTPDBA-414 - proc to align indexes/.vs/OCTPDBA-414 - proc to align indexes/v15/.ssms_suo differ
diff --git a/OCTPDBA-414 - proc to align indexes/OCTPDBA-414 - proc to align indexes.ssmssln b/OCTPDBA-414 - proc to align indexes/OCTPDBA-414 - proc to align indexes.ssmssln
new file mode 100644
index 0000000..f51f7f6
--- /dev/null
+++ b/OCTPDBA-414 - proc to align indexes/OCTPDBA-414 - proc to align indexes.ssmssln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# SQL Server Management Studio Solution File, Format Version 18.00
+VisualStudioVersion = 15.0.28307.421
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{4F2E2C19-372F-40D8-9FA7-9D2138C6997A}") = "OCTPDBA-414 - proc to align indexes", "OCTPDBA-414 - proc to align indexes.ssmssqlproj", "{7E9B5A7A-BC32-4B75-8C24-E4D76990E6C4}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Default|Default = Default|Default
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7E9B5A7A-BC32-4B75-8C24-E4D76990E6C4}.Default|Default.ActiveCfg = Default
+ {CDCDFBE0-AA1A-4B35-BD71-6CA1EEB6DCCB}.Default|Default.ActiveCfg = Default
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {55F426D9-CD01-43F0-8B52-89D42AEDECF8}
+ EndGlobalSection
+EndGlobal
diff --git a/OCTPDBA-414 - proc to align indexes/OCTPDBA-414 - proc to align indexes.ssmssqlproj b/OCTPDBA-414 - proc to align indexes/OCTPDBA-414 - proc to align indexes.ssmssqlproj
new file mode 100644
index 0000000..c3cb7d7
--- /dev/null
+++ b/OCTPDBA-414 - proc to align indexes/OCTPDBA-414 - proc to align indexes.ssmssqlproj
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+ 2023-02-06T13:35:17.913386+01:00
+ SQL
+ (local)
+
+ Windows Authentication
+ master
+ 30
+ 0
+ NotSpecified
+ Microsoft SQL Server Management Studio - Query
+
+
+
+
+
+
+ 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:(local):True
+ (local)
+
+ maintain entry indexes.sql
+
+
+ 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:(local):True
+ (local)
+
+ proc.sql
+
+
+ 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:(local):True
+ (local)
+
+ table.sql
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCTPDBA-414 - proc to align indexes/generate inserts.sql b/OCTPDBA-414 - proc to align indexes/generate inserts.sql
new file mode 100644
index 0000000..42350b7
--- /dev/null
+++ b/OCTPDBA-414 - proc to align indexes/generate inserts.sql
@@ -0,0 +1,170 @@
+USE Arizona;
+GO
+
+DELETE FROM upd.IA_IndexesAlignementActions
+WHERE IA_schema_name = 'dbo.Criteria';
+
+BEGIN TRANSACTION;
+WITH ColInfo
+AS (SELECT TblName = o.name,
+ SchemaTbl = s.name + '.' + o.name,
+ IndexName = i.name,
+ s.name AS schemaName,
+ IsPrimaryKey = i.is_primary_key,
+ IsUniqueConstraint = i.is_unique_constraint,
+ IsUnique = i.is_unique,
+ CASE
+ WHEN i.type = 1 THEN
+ 1
+ ELSE
+ 0
+ END AS is_clustered,
+ ColName = c.name,
+ IsComputedCol = c.is_computed,
+ IsIncludedCol = ic.is_included_column,
+ ic.key_ordinal,
+ FilterDefinition = i.filter_definition,
+ i.object_id,
+ i.ignore_dup_key,
+ i.fill_factor,
+ i.is_padded
+ FROM sys.objects o
+ JOIN sys.schemas s
+ ON o.schema_id = s.schema_id
+ JOIN sys.columns c
+ ON o.object_id = c.object_id
+ JOIN sys.indexes i
+ ON c.object_id = i.object_id
+ JOIN sys.index_columns ic
+ ON i.index_id = ic.index_id
+ AND o.object_id = ic.object_id
+ AND c.column_id = ic.column_id
+ WHERE o.name = 'criteria'
+ AND s.name = 'dbo')
+SELECT DISTINCT
+ '
+INSERT INTO arizona.upd.IA_IndexesAlignementActions
+(
+ IA_executionDate,
+ IA_schema_name,
+ IA_table_name,
+ IA_columns_name,
+ IA_is_clustered,
+ IA_is_unique,
+ IA_included_columns,
+ IA_is_to_be_deleted,
+ IA_is_to_be_recreated,
+ IA_expected_index_name,
+ IA_foundIndexName,
+ IA_wasIndexFound,
+ IA_wasCreated,
+ IA_wasRenamed,
+ IA_wasDeleted,
+ IA_wasRecreated,
+ IA_includedColumnsMatch,
+ IA_actualColumns,
+ IA_actualIncludedColumns,
+ IA_statusMsg,
+ IA_index_options
+)
+SELECT
+ NULL as IA_executionDate,
+ ''' + x.schemaName + ''' as IA_schema_name,
+ ''' + x.TblName + ''' as IA_table_name,
+ ''' + c.IndexColumns + ''' as IA_columns_name,
+ 0 as IA_is_clustered,
+ ' + CASE
+ WHEN x.IsUnique = 0 THEN
+ '0'
+ ELSE
+ '1'
+ END + ' as IA_is_unique,
+ ' + CASE
+ WHEN ci.IncludedColumns IS NOT NULL THEN
+ '''' + ci.IncludedColumns + ''''
+ ELSE
+ 'NULL'
+ END + ' as IA_included_columns,
+ 0 as IA_is_to_be_deleted,
+ 0 as IA_is_to_be_recreated,
+ ''' + x.IndexName
+ + ''' as IA_expected_index_name,
+ NULL as IA_foundIndexName,
+ 0 as IA_wasIndexFound,
+ 0 as IA_wasCreated,
+ 0 as IA_wasRenamed,
+ 0 as IA_wasDeleted,
+ 0 as IA_wasRecreated,
+ NULL as IA_includedColumnsMatch,
+ NULL as IA_actualColumns,
+ NULL as IA_actualIncludedColumns,
+ NULL as IA_statusMsg,
+ ''' + CASE
+ WHEN INDEXPROPERTY(x.object_id, x.IndexName, 'IsStatistics') = 1 THEN
+ 'STATISTICS_NORECOMPUTE = ON, '
+ ELSE
+ 'STATISTICS_NORECOMPUTE = OFF, '
+ END + CASE
+ WHEN x.ignore_dup_key = 1 THEN
+ 'IGNORE_DUP_KEY = ON, '
+ ELSE
+ 'IGNORE_DUP_KEY = OFF, '
+ END + CASE
+ WHEN x.is_padded = 1 THEN
+ 'PAD_INDEX = ON,'
+ ELSE
+ ''
+ END + 'SORT_IN_TEMPDB = OFF, FILLFACTOR =' + CAST(x.fill_factor AS VARCHAR(3))
+ + ''' as IA_index_options
+WHERE NOT EXISTS(
+ SELECT 1
+ FROM arizona.upd.IA_IndexesAlignementActions s
+ WHERE s.IA_executionDate IS NULL
+ AND s.IA_schema_name = ''' + x.schemaName + '''
+ AND s.IA_table_name = ''' + x.TblName + '''
+ AND s.IA_columns_name = ''' + c.IndexColumns + '''
+ ' + CASE
+ WHEN ci.IncludedColumns IS NOT NULL THEN
+ 'AND s.IA_included_columns = ''' + ci.IncludedColumns + ''' '
+ ELSE
+ ''
+ END + '
+)
+' AS cmd,
+ x.IndexName,
+ c.IndexColumns,
+ ci.IncludedColumns
+FROM ColInfo x
+ CROSS APPLY
+(
+ SELECT IndexColumns = STUFF(sq.strXML, 1, 2, '')
+ FROM
+ (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.schemaName = x2.schemaName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsIncludedCol = 0
+ ORDER BY x2.key_ordinal
+ FOR XML PATH('')
+ ) sq(strXML)
+) c
+ OUTER APPLY
+(
+ SELECT IncludedColumns = STUFF(sq.strXML, 1, 2, '')
+ FROM
+ (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.schemaName = x2.schemaName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsIncludedCol = 1
+ ORDER BY x2.key_ordinal
+ FOR XML PATH('')
+ ) sq(strXML)
+) ci;
+
+
+ROLLBACK TRANSACTION;
\ No newline at end of file
diff --git a/OCTPDBA-414 - proc to align indexes/maintain entry indexes.sql b/OCTPDBA-414 - proc to align indexes/maintain entry indexes.sql
new file mode 100644
index 0000000..b152b45
--- /dev/null
+++ b/OCTPDBA-414 - proc to align indexes/maintain entry indexes.sql
@@ -0,0 +1,686 @@
+/*=============================================================================
+
+Maintain and align indexes on Arizona.dbo.entry
+
+TODO:
+ allow to skip INDEX DROP for unlisted indexes
+
+Parameters
+----------------------
+Populate the var table @indexesToMaintains to drop / create and rename indexes to be aligned.
+You need to specify those fields:
+ * schemaName, tableName: the schema and table name for which you want to maintain the indexes.
+ This script was written with working against several tables in mind, but is not (yet) tested to handle this case.
+ * columnsName: What columns are part of the index key, in the correct order
+ As we have divergent indexes names, we must use the index columns as the key to find the indexes.
+ * includedColumns_inp: if the index have included columns, list them here.
+ When an index is found, the included columns list it also compared to determine if the index is aligned.
+ * expectedIndexName_inp: The name the index should have. It will be used when creating missing indexes or renaming existing indexes
+ The index name is optionnal if we specify in the table that the index must be dropped.
+ * isToBeDeleted_inp: if true, indicate that the index should be dropped.
+ * isToBeRecreated_inp: if true, will drop and re-create the index even if the structure matches.
+ * isClustered_inp: if true and the index must be (re-)created, it will be created as a clustered index
+ * isUnique_inp: if true and the index must be (re-)created, it will be created as a unique index
+
+Note that:
+ * Matching is always made from the columns of the index, never on the name of the index.
+ The reason is that we might have difference in the name of the index between several servers.
+ * If an index exists with the name A, but your list contains a similar index with the name B, index A will be renamed to B with sp_rename
+ * For each table(s) referenced in @indexesToMaintains, if an index exists that is not listed in the variable table it will be considered to be
+ dropped if @DoDropExistingIndexesNotReferenced is set to 1.
+ * If you list a specific existing index to be dropped in @indexesToMaintains then the following fields are optionnal:
+ expected index name
+ flag isClustered
+ flag isUnique
+
+Context
+----------------------
+In any databases
+
+Creation : 09.11.2022 / TSC
+Modifications:
+
+=============================================================================*/
+USE [Arizona];
+GO
+
+BEGIN TRANSACTION;
+SET XACT_ABORT ON;
+SET NOCOUNT ON;
+
+DECLARE @query VARCHAR(MAX); /* for dynamic sql */
+DECLARE @schemaName VARCHAR(100); /* used in cursor */
+DECLARE @tableName VARCHAR(100); /* used in cursor */
+
+/*
+If set to true, the script will not apply the change.
+Generated statements are always printed on the message tab.
+*/
+DECLARE @DoOnlyOutputStatement BIT = 0;
+
+/*
+If the script find local indexes that are not listed in the variable table, should it drop them or not ?
+An index whose definition is not aligned with the temp table or flagged "to be rebuilt" will always be dropped before creation.
+*/
+DECLARE @DoDropExistingIndexesNotReferenced BIT = 0;
+
+DECLARE @indexesToMaintains TABLE(
+ [Id] INT IDENTITY NOT NULL
+ ,[SchemaName] VARCHAR(100) NOT NULL /* the schema the table is part of */
+ ,[TableName] VARCHAR(100) NOT NULL /* On which table is the index, whithout the schema */
+ ,columnsName_inp VARCHAR(MAX) NOT NULL /* list all the columns of the index, in the correct orders */
+ ,isClustered_inp BIT NOT NULL DEFAULT 0 /* Is the indexe a clustered index ? */
+ ,isUnique_inp BIT NOT NULL DEFAULT 0 /* Is the index unique ? */
+ ,includedColumns_inp VARCHAR(MAX)NULL /* list all the included columns the index should have. only relevant for idx not to be dropped */
+ ,isToBeDeleted_inp BIT NOT NULL DEFAULT 0 /* must the script drop this index ? */
+ ,isToBeRecreated_inp BIT NOT NULL DEFAULT 0 /* must the script recreate this index ?
+ If an existing index differs from the definition, it will be dropped and the correct one created.
+ Use this only to force the re-creation even if the structure is identical */
+ ,expectedIndexName_inp VARCHAR(MAX) NULL /* the name the index should have, used to determine if a rename of the existing index should be done */
+ ,indexName VARCHAR(MAX) NULL /* computed by the script. The index name on this system, as indexes name can be different accross systems*/
+ ,isIndexFound_comp BIT NOT NULL DEFAULT 0 /* computed by the script. set to 1 if the index is present on the server */
+ ,isToBeCreated_comp BIT NULL DEFAULT 0 /* computed by the script. does this index will be created on the server ? */
+ ,isToBeRenamed_comp BIT NULL DEFAULT 0 /* computed by the script. does this index will be renamed ? */
+ ,isToBeDeleted_comp BIT NULL DEFAULT 0 /* computed by the script. does this index will be deleted ? */
+ ,isToBeRecreated_comp BIT NULL DEFAULT 0 /* computed by the script. does this index will be re-created ? */
+ ,internal_includedColumnsMatch BIT NULL /* computed ba the script. Are the expected and actual included columns identical ? */
+ ,internal_actualColumns VARCHAR(MAX) NULL /* the actual columns in the existing index */
+ ,internal_actualIncludedColumns VARCHAR(MAX) NULL /* the actual columns in the INCLUDE part of the index */
+ ,internal_statusMsg VARCHAR(MAX) /* Message, used for debug */
+);
+
+/* Declare the expected structure of the indexes */
+INSERT INTO @indexesToMaintains ([columnsName_inp],
+ [isToBeDeleted_inp],
+ [isToBeRecreated_inp],
+ [expectedIndexName_inp],
+ [includedColumns_inp],
+ [schemaName],
+ [tableName],
+ [isClustered_inp],
+ [isUnique_inp])
+/* indexe(s) we do want */
+VALUES('Entry_id',0,0,'PK_Entry_id', NULL,'dbo','entry',0,0)
+,('ET_batch_run',0,0,'NCIX_Entry_COL_ET_batch_run',NULL,'dbo','entry',0,0)
+,('ET_accounting_period',0,0,'NCIX_Entry_COL_ET_accounting_period','Entry_ID','dbo','entry',0,0)
+,('ET_document_header',0,0,'NCIX_Entry_COL_ET_document_header','ET_debit_currency_amount, ET_credit_currency_amount','dbo','entry',0,0)
+,('ET_account, ET_document_header',0,0,'NCIX_Entry_COL_ET_account','Entry_ID','dbo','entry',0,0)
+,('ET_reconciliation_status, ET_account, ET_document_header',0,0,'NCIX_Entry_COL_ET_reconciliation_status','ET_debit_base_amount, ET_credit_base_amount, ET_reconciliation_base_amount','dbo','entry',0,0)
+,('ET_predefined_entry',0,0,'NCIX_Entry_COL_ET_predefined_entry',NULL,'dbo','entry',0,0)
+,('ET_entry_address',0,0,'NCIX_Entry_COL_ET_entry_address',NULL,'dbo','entry',0,0)
+,('ET_currency',0,0,'NCIX_Entry_COL_ET_currency',NULL,'dbo','entry',0,0)
+
+/* indexe(s) used in central, even if not in pharmacies*/
+,('ET_entry_type',0,0,'NCIX_Entry_COL_ET_entry_type',NULL,'dbo','entry',0,0)
+
+/* indexe(s) we really want to drop*/
+,('ET_master_ID',1,0,'NCIX_Entry_COL_ET_master_ID',NULL,'dbo','entry',0,0)
+,('ET_bmc_user_profile',1,0,'NCIX_Entry_COL_ET_bmc_user_profile',NULL,'dbo','entry',0,0)
+,('ET_sales_tax_code',1,0,'NCIX_Entry_COL_ET_sales_tax_code',NULL,'dbo','entry',0,0)
+,('ET_APS_TS', 1, 0, 'NCIX_Entry_COL_ET_APS_TS',NULL,'dbo','entry',0,0)
+
+;
+
+/* check for duplicate */
+DECLARE @msg VARCHAR(MAX) = '';
+SELECT @msg = @msg + 'Duplicate index (on expected index name) found in indexes definition. Table ['+[itm].[SchemaName]+'].['+[itm].[TableName]+'], expected index name ['+[itm].[expectedIndexName_inp]+']'+CHAR(13)+CHAR(10)
+FROM @indexesToMaintains [itm]
+ JOIN (
+ SELECT
+ [ii].[expectedIndexName_inp] AS [key]
+ FROM @indexesToMaintains [ii]
+ GROUP BY [ii].[expectedIndexName_inp]
+ HAVING COUNT(1)>1
+ ) d ON d.[key] = [itm].[expectedIndexName_inp]
+GROUP BY [itm].[SchemaName], [itm].[TableName], [itm].[expectedIndexName_inp]
+;
+
+/* stop here if we have an issue in the variable table */
+IF @msg <> ''
+BEGIN
+ RAISERROR(@msg, 16, 4);
+ IF @@TRANCOUNT>0
+ BEGIN
+ ROLLBACK TRANSACTION;
+ END
+ RETURN
+END
+
+SET @msg = '';
+SELECT @msg = @msg + 'Duplicate index (on column definition) found in indexes definition. Table ['+[itm].[SchemaName]+'].['+[itm].[TableName]+'], columns in index: '+[itm].[columnsName_inp]
+ + CASE
+ WHEN [itm].[includedColumns_inp] IS NOT NULL THEN ', included colum(s): '+[itm].[includedColumns_inp]
+ ELSE ''
+ END
+ +CHAR(13)+CHAR(10)
+FROM @indexesToMaintains [itm]
+ JOIN (
+ SELECT
+ [ii].[columnsName_inp]+'_'+ISNULL([ii].[includedColumns_inp],'') AS [key]
+ FROM @indexesToMaintains [ii]
+ GROUP BY [ii].[columnsName_inp]+'_'+ISNULL([ii].[includedColumns_inp],'')
+ HAVING COUNT(1)>1
+ ) d ON d.[key] = [itm].[columnsName_inp]+'_'+ISNULL([itm].[includedColumns_inp],'')
+GROUP BY [itm].[SchemaName], [itm].[TableName], [itm].[columnsName_inp], [itm].[includedColumns_inp]
+;
+
+/* stop here if we have an issue in the variable table */
+IF @msg <> ''
+BEGIN
+ RAISERROR(@msg, 16, 4);
+ IF @@TRANCOUNT>0
+ BEGIN
+ ROLLBACK TRANSACTION;
+ END
+ RETURN
+END
+
+/* fetch the indexes name on the current instance */
+DECLARE curIdxName CURSOR FAST_FORWARD READ_ONLY FOR
+ SELECT DISTINCT [itm].[schemaName], [itm].[tableName]
+ FROM @indexesToMaintains [itm];
+
+OPEN curIdxName;
+
+FETCH NEXT FROM curIdxName INTO @schemaName, @tableName;
+
+WHILE @@FETCH_STATUS = 0
+BEGIN
+
+ ;WITH ColInfo
+ AS (
+ SELECT
+ o.[Name] AS TblName
+ ,s.[Name] + '.' + o.[Name] AS SchemaTbl
+ ,i.[Name] AS IndexName
+ ,i.[is_primary_key] AS IsPrimaryKey
+ ,i.[is_unique_constraint] AS IsUniqueConstraint
+ ,i.[is_unique] AS IsUnique
+ ,c.[Name] AS ColName
+ ,c.[is_computed] AS IsComputedCol
+ ,ic.[is_included_column] AS IsIncludedCol
+ ,ic.[key_ordinal]
+ ,i.[filter_definition] AS FilterDefinition
+ FROM [sys].[objects] o
+ INNER JOIN [sys].[schemas] s
+ ON o.SCHEMA_ID = s.SCHEMA_ID
+ INNER JOIN [sys].[COLUMNS] c
+ ON o.OBJECT_ID = c.OBJECT_ID
+ INNER JOIN [sys].[indexes] i
+ ON c.OBJECT_ID = i.OBJECT_ID
+ INNER JOIN [sys].[index_columns] ic
+ ON i.[index_id] = ic.[index_id]
+ AND o.OBJECT_ID = ic.OBJECT_ID
+ AND c.[column_id] = ic.[column_id]
+ )
+
+ /* map the list to the actual indexes */
+ UPDATE [itm] SET [itm].[indexName] = i.[name]
+ ,[itm].[internal_includedColumnsMatch] = CASE
+ WHEN ISNULL([itm].[includedColumns_inp],'') = ISNULL([idx_cols].[includedColumns],'') THEN 1
+ ELSE 0
+ END
+ ,[itm].[internal_actualIncludedColumns] = [idx_cols].[includedColumns]
+ ,[itm].[internal_actualColumns] = [idx_cols].[IndexColumns]
+ ,[itm].[isIndexFound_comp] = 1
+ ,[itm].[isToBeCreated_comp] = 0
+ FROM [sys].[indexes] AS i WITH (NOLOCK)
+ INNER JOIN [sys].[objects] o WITH (NOLOCK)
+ ON i.OBJECT_ID = o.OBJECT_ID
+ OUTER APPLY (
+ SELECT DISTINCT
+ x.TblName
+ ,x.IndexName
+ ,x.IsPrimaryKey
+ ,x.IsUniqueConstraint
+ ,x.IsUnique
+ ,c.IndexColumns
+ ,ci.includedColumns
+ ,cc.ComputedColumns
+ ,x.FilterDefinition
+ FROM ColInfo x
+ CROSS APPLY (
+ SELECT STUFF(sq.strXML, 1, 2, '') AS IndexColumns
+ FROM (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsIncludedCol = 0
+ ORDER BY x2.[key_ordinal]
+ FOR XML PATH('')
+ ) sq(strXML)
+ ) c
+ OUTER APPLY (
+ SELECT STUFF(sq.strXML, 1, 2, '') AS includedColumns
+ FROM (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsIncludedCol = 1
+ ORDER BY x2.[key_ordinal]
+ FOR XML PATH('')
+ ) sq(strXML)
+ ) ci
+ OUTER APPLY (
+ SELECT STUFF(sq.strXML, 1, 2, '') AS ComputedColumns
+ FROM (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsComputedCol = 1
+ ORDER BY x2.[key_ordinal]
+ FOR XML PATH('')
+ ) sq(strXML)
+ ) cc
+ WHERE x.TblName = o.[Name]
+ AND x.IndexName = i.[Name]
+ ) idx_cols
+ LEFT OUTER JOIN (
+ SELECT
+ SCHEMA_NAME(tab.SCHEMA_ID) + '.' + tab.[Name] AS [table]
+ ,col.[column_id]
+ ,col.[Name] AS [COLUMN_NAME]
+ ,CASE
+ WHEN fk.OBJECT_ID IS NOT NULL THEN '>-'
+ ELSE NULL
+ END AS rel
+ ,SCHEMA_NAME(pk_tab.SCHEMA_ID) + '.' + pk_tab.[Name] AS primary_table
+ ,pk_col.[Name] AS pk_column_name
+ ,fk_cols.[constraint_column_id] AS NO
+ ,fk.[Name] AS fk_constraint_name
+ ,tab.[Name] AS tbl_name
+ FROM [sys].[TABLES] tab
+ INNER JOIN [sys].[COLUMNS] col
+ ON col.OBJECT_ID = tab.OBJECT_ID
+ LEFT OUTER JOIN [sys].[foreign_key_columns] fk_cols
+ ON fk_cols.[parent_object_id] = tab.OBJECT_ID
+ AND fk_cols.[parent_column_id] = col.[column_id]
+ LEFT OUTER JOIN [sys].[foreign_keys] fk
+ ON fk.OBJECT_ID = fk_cols.[constraint_object_id]
+ LEFT OUTER JOIN [sys].[TABLES] pk_tab
+ ON pk_tab.OBJECT_ID = fk_cols.[referenced_object_id]
+ LEFT OUTER JOIN [sys].[COLUMNS] pk_col
+ ON pk_col.[column_id] = fk_cols.[referenced_column_id]
+ AND pk_col.OBJECT_ID = fk_cols.[referenced_object_id]
+ WHERE fk.OBJECT_ID IS NOT NULL
+ ) fk
+ ON fk.tbl_name = o.[Name]
+ AND idx_cols.IndexColumns LIKE '%' + fk.[COLUMN_NAME] + '%'
+ INNER JOIN @indexesToMaintains [itm]
+ ON itm.[schemaName] = @schemaName
+ AND itm.[tableName] = @tableName
+ AND itm.[columnsName_inp] COLLATE Latin1_General_CI_AI = [idx_cols].[IndexColumns] COLLATE Latin1_General_CI_AI
+ AND ISNULL([itm].[includedColumns_inp],'') COLLATE Latin1_General_CI_AI = ISNULL([idx_cols].[includedColumns],'') COLLATE Latin1_General_CI_AI
+ WHERE o.TYPE = 'U' -- user table
+ --AND i.[index_id] = s.[index_id]
+ --AND s.[database_id] = DB_ID()
+ AND o.[Name] = @tableName
+ AND SCHEMA_NAME(o.SCHEMA_ID) = @schemaName
+ OPTION (RECOMPILE);
+
+
+ /* Add the indexes not in the list but present on the server to the list */
+ ;WITH ColInfo
+ AS (
+ SELECT
+ o.[Name] AS TblName
+ ,SCHEMA_NAME(o.[schema_id]) AS SchemaName
+ ,s.[Name] + '.' + o.[Name] AS SchemaTbl
+ ,i.[Name] AS IndexName
+ ,i.[is_primary_key] AS IsPrimaryKey
+ ,i.[is_unique_constraint] AS IsUniqueConstraint
+ ,i.[is_unique] AS IsUnique
+ ,c.[Name] AS ColName
+ ,c.[is_computed] AS IsComputedCol
+ ,ic.[is_included_column] AS IsIncludedCol
+ ,ic.[key_ordinal]
+ ,i.[filter_definition] AS FilterDefinition
+ FROM [sys].[objects] o
+ INNER JOIN [sys].[schemas] s
+ ON o.SCHEMA_ID = s.SCHEMA_ID
+ INNER JOIN [sys].[COLUMNS] c
+ ON o.OBJECT_ID = c.OBJECT_ID
+ INNER JOIN [sys].[indexes] i
+ ON c.OBJECT_ID = i.OBJECT_ID
+ INNER JOIN [sys].[index_columns] ic
+ ON i.[index_id] = ic.[index_id]
+ AND o.OBJECT_ID = ic.OBJECT_ID
+ AND c.[column_id] = ic.[column_id]
+ )
+
+ INSERT INTO @indexesToMaintains (
+ [schemaName]
+ ,[tableName]
+ ,[columnsName_inp]
+ ,[indexName]
+ ,[isToBeDeleted_inp]
+ ,[isToBeDeleted_comp]
+ ,[isToBeRecreated_inp]
+ ,[internal_statusMsg]
+ ,[internal_actualIncludedColumns]
+ ,[internal_actualColumns]
+ ,[isIndexFound_comp]
+ ,[isToBeCreated_comp]
+ ,[expectedIndexName_inp]
+ )
+ SELECT DISTINCT
+ @schemaName AS [SchemaName]
+ ,@tableName AS [TableName]
+ ,c.[IndexColumns] AS [columnsName]
+ ,x.[IndexName] AS indexName
+ ,0 AS [isToBeDeleted_inp]
+ ,CASE
+ WHEN EXISTS(
+ SELECT 1
+ FROM @indexesToMaintains [itm]
+ WHERE itm.[expectedIndexName_inp] = x.[IndexName]
+ OR ISNULL(itm.[columnsName_inp],'') <> ISNULL(itm.[internal_actualColumns],'')
+ OR ISNULL(itm.[includedColumns_inp],'') <> ISNULL(itm.[internal_actualIncludedColumns],'')
+ ) THEN 1
+ WHEN @DoDropExistingIndexesNotReferenced = 1 THEN 1
+ ELSE 0
+ END AS [isToBeDeleted_comp]
+ ,0 AS [isToBeRecreated_inp]
+ ,CASE
+ WHEN EXISTS(
+ SELECT 1
+ FROM @indexesToMaintains [itm]
+ WHERE itm.[expectedIndexName_inp] = x.[IndexName]
+ OR ISNULL(itm.[columnsName_inp],'') <> ISNULL(itm.[internal_actualColumns],'')
+ OR ISNULL(itm.[includedColumns_inp],'') <> ISNULL(itm.[internal_actualIncludedColumns],'')
+ ) THEN 'Index present locally not as expected, drop before creation'
+ WHEN @DoDropExistingIndexesNotReferenced = 1 THEN 'Index present locally only'
+ ELSE NULL
+ END AS [internal_statusMsg]
+ ,ci.[includedColumns] AS [internal_actualIncludedColumns]
+ ,c.[IndexColumns] AS [internal_actualColumns]
+ ,1 AS [isIndexFound_comp]
+ ,0 AS [isToBeCreated_comp]
+ ,x.[IndexName] AS [expectedIndexName_inp]
+ FROM ColInfo x
+ CROSS APPLY(SELECT IndexColumns = STUFF(sq.strXML, 1, 2, '')
+ FROM ( SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName AND x.IndexName = x2.IndexName AND x2.IsIncludedCol = 0
+ ORDER BY x2.key_ordinal
+ FOR XML PATH('')
+ ) sq (strXML)
+ ) c
+ Outer APPLY(SELECT IncludedColumns = STUFF(sq.strXML, 1, 2, '')
+ FROM ( SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName AND x.IndexName = x2.IndexName AND x2.IsIncludedCol = 1
+ ORDER BY x2.key_ordinal
+ FOR XML PATH('')
+ ) sq (strXML)
+ ) ci
+ Outer APPLY(SELECT ComputedColumns = STUFF(sq.strXML, 1, 2, '')
+ FROM ( SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName AND x.IndexName = x2.IndexName AND x2.IsComputedCol = 1
+ ORDER BY x2.key_ordinal
+ FOR XML PATH('')
+ ) sq (strXML)
+ ) cc
+ LEFT OUTER JOIN (
+ SELECT
+ SCHEMA_NAME(tab.SCHEMA_ID) + '.' + tab.[Name] AS [table]
+ ,col.[column_id]
+ ,col.[Name] AS [COLUMN_NAME]
+ ,CASE
+ WHEN fk.OBJECT_ID IS NOT NULL THEN '>-'
+ ELSE NULL
+ END AS rel
+ ,SCHEMA_NAME(pk_tab.SCHEMA_ID) + '.' + pk_tab.[Name] AS primary_table
+ ,pk_col.[Name] AS pk_column_name
+ ,fk_cols.[constraint_column_id] AS NO
+ ,fk.[Name] AS fk_constraint_name
+ ,tab.[Name] AS tbl_name
+ FROM [sys].[TABLES] tab
+ INNER JOIN [sys].[COLUMNS] col
+ ON col.OBJECT_ID = tab.OBJECT_ID
+ LEFT OUTER JOIN [sys].[foreign_key_columns] fk_cols
+ ON fk_cols.[parent_object_id] = tab.OBJECT_ID
+ AND fk_cols.[parent_column_id] = col.[column_id]
+ LEFT OUTER JOIN [sys].[foreign_keys] fk
+ ON fk.OBJECT_ID = fk_cols.[constraint_object_id]
+ LEFT OUTER JOIN [sys].[TABLES] pk_tab
+ ON pk_tab.OBJECT_ID = fk_cols.[referenced_object_id]
+ LEFT OUTER JOIN [sys].[COLUMNS] pk_col
+ ON pk_col.[column_id] = fk_cols.[referenced_column_id]
+ AND pk_col.OBJECT_ID = fk_cols.[referenced_object_id]
+ WHERE fk.OBJECT_ID IS NOT NULL
+ ) fk
+ ON fk.tbl_name = x.[TblName]
+ AND [c].[IndexColumns] LIKE '%' + fk.[COLUMN_NAME] + '%'
+ WHERE x.[SchemaName] =@schemaName
+ AND x.[TblName] =@tableName
+ AND NOT EXISTS(
+ SELECT 1
+ FROM @indexesToMaintains [itm2]
+ WHERE 1=1
+ AND ISNULL(itm2.[internal_actualColumns],'') = ISNULL(c.[IndexColumns],'')
+ AND ISNULL(itm2.[internal_actualIncludedColumns],'') = ISNULL(ci.[includedColumns],'')
+ )
+ OPTION (RECOMPILE);
+
+
+ FETCH NEXT FROM curIdxName INTO @schemaName, @tableName;
+END
+
+CLOSE curIdxName;
+DEALLOCATE curIdxName;
+
+
+/* Adjust the "_comp" flags to create a matrix of actions */
+/* to be created */
+UPDATE [itm]
+ SET
+ [itm].[isToBeCreated_comp] = CASE
+ WHEN [itm].[isToBeDeleted_inp] = 0 THEN 1
+ ELSE 0
+ END
+ FROM @indexesToMaintains [itm]
+ WHERE [itm].[indexName] IS NULL /* index was not found on the server */
+ AND [itm].[expectedIndexName_inp] IS NOT NULL /* we did gave an index name, ie: we want to create it if missing */
+;
+
+/* to be renamed */
+UPDATE [itm]
+ SET
+ [itm].[isToBeRenamed_comp] = 1
+ FROM @indexesToMaintains [itm]
+ WHERE [itm].[indexName] IS NOT NULL /* index was not found on the server */
+ AND [itm].[expectedIndexName_inp] IS NOT NULL /* we did gave an index name, ie: we expect that index to be present */
+ AND [indexName] <> [itm].[expectedIndexName_inp]
+ AND [isToBeDeleted_inp] = 0
+ AND [isToBeDeleted_comp] = 0
+;
+
+/* to be re-created */
+UPDATE [itm]
+ SET
+ [itm].[isToBeRecreated_comp] = 1
+ FROM @indexesToMaintains [itm]
+ WHERE [isToBeRecreated_inp] = 1
+;
+
+/* to be deleted, because specified in table */
+UPDATE itm
+ SET
+ [itm].[isToBeDeleted_comp] = CASE
+ WHEN [itm].[isIndexFound_comp] = 0 THEN 0
+ ELSE 1
+ END
+ ,[itm].[isToBeRecreated_comp] = 0 /* deletion override re-create */
+ ,[itm].[isToBeRenamed_comp] = 0 /* deletion override rename */
+FROM @indexesToMaintains [itm]
+WHERE [itm].[isToBeDeleted_inp] = 1
+;
+
+/* to be deleted, because different to specs. link on index name */
+UPDATE [exp]
+ SET
+ [exp].[isToBeCreated_comp] = 1 /* flag the expected index "to be created" */
+FROM @indexesToMaintains [exp] --expected
+ JOIN @indexesToMaintains [act] --actual
+ ON [act].[indexName] = [exp].[expectedIndexName_inp]
+WHERE [exp].[isToBeDeleted_comp] = 0
+AND [exp].[isToBeCreated_comp] = 0
+AND [exp].[isToBeRenamed_comp] = 0
+AND [exp].[isToBeRecreated_inp] = 0
+AND (
+ [exp].[columnsName_inp] != [act].[internal_actualColumns]
+ OR [exp].[includedColumns_inp] != [act].[internal_actualIncludedColumns]
+)
+;
+
+UPDATE [act]
+ SET
+ [act].[isToBeDeleted_comp] = 1 /* flag the actual index "to be deleted" */
+FROM @indexesToMaintains [exp] --expected
+ JOIN @indexesToMaintains [act] --actual
+ ON [act].[indexName] = [exp].[expectedIndexName_inp]
+WHERE (
+ [exp].[columnsName_inp] != [act].[internal_actualColumns]
+ OR [exp].[includedColumns_inp] != [act].[internal_actualIncludedColumns]
+)
+;
+
+/* to be deleted, because different to specs. link on index columns */
+UPDATE [exp]
+ SET
+ [exp].[isToBeCreated_comp] = 1 /* flag the expected index "to be created" */
+FROM @indexesToMaintains [exp] --expected
+ JOIN @indexesToMaintains [act] --actual
+ ON [act].[internal_actualColumns] = [exp].[columnsName_inp]
+WHERE (
+ [exp].[columnsName_inp] != [act].[internal_actualColumns]
+ OR [exp].[includedColumns_inp] != [act].[internal_actualIncludedColumns]
+)
+;
+UPDATE [act]
+ SET
+ [act].[isToBeDeleted_comp] = 1 /* flag the actual index "to be deleted" */
+FROM @indexesToMaintains [exp] --expected
+ JOIN @indexesToMaintains [act] --actual
+ ON [act].[internal_actualColumns] = [exp].[columnsName_inp]
+WHERE (
+ [exp].[columnsName_inp] != [act].[internal_actualColumns]
+ OR [exp].[includedColumns_inp] != [act].[internal_actualIncludedColumns]
+)
+;
+
+/* if we have both "rename" and "delete" actions, remove the "rename" action */
+UPDATE @indexesToMaintains
+SET [isToBeRenamed_comp] = 0
+WHERE [isToBeRenamed_comp] = 1
+AND [isToBeDeleted_comp] = 1
+;
+
+/* ensure that we don't have clash between indexes to create and indexes to rename */
+UPDATE ir
+ SET [ir].[isToBeRenamed_comp] = 0 /* do not rename this index */
+ , [ir].[isToBeDeleted_inp] = 1 /* drop this index instead, as we have one with the correct structure about to be created */
+FROM @indexesToMaintains [ic] /* to create */
+ JOIN @indexesToMaintains [ir] /* to rename */
+ ON ic.[expectedIndexName_inp] = ir.[expectedIndexName_inp]
+WHERE [ic].[isToBeCreated_comp] = 1
+AND [ir].[isToBeRenamed_comp] = 1
+
+/* Show the action matrix */
+SELECT [itm].[isIndexFound_comp]
+ ,[itm].[isToBeCreated_comp]
+ ,[itm].[isToBeRenamed_comp]
+ ,[itm].[isToBeDeleted_comp]
+ ,[itm].[isToBeRecreated_comp]
+ ,[itm].[internal_statusMsg]
+ ,'....'
+ ,[itm].[isToBeDeleted_inp]
+ ,[itm].[isToBeRecreated_inp]
+ ,[itm].[indexName]
+ ,[itm].[expectedIndexName_inp]
+ ,[itm].[columnsName_inp]
+ ,[itm].[internal_actualColumns]
+ ,[itm].[includedColumns_inp]
+ ,[itm].[internal_actualIncludedColumns]
+FROM @indexesToMaintains [itm]
+ORDER BY [itm].[isIndexFound_comp],[itm].[isToBeDeleted_inp], [itm].[columnsName_inp];
+
+
+/* Drop the indexe(s) that are to be deleted or recreated */
+SET @query='';
+SELECT @query = @query + 'DROP INDEX '+[itm].[indexName]+' ON dbo.entry;'+CHAR(13)+CHAR(10)
+FROM @indexesToMaintains [itm]
+WHERE [itm].[isToBeDeleted_comp] = 1
+OR [itm].[isToBeRecreated_comp] = 1
+;
+
+PRINT REPLICATE('-', 40);
+PRINT '-- execute DROP INDEX';
+PRINT REPLICATE('-', 40);
+PRINT @query;
+PRINT REPLICATE('-', 40);
+PRINT CHAR(13)+CHAR(10);
+
+IF @DoOnlyOutputStatement = 0
+BEGIN
+ EXECUTE(@query);
+END
+
+/* rename existing indexe(s) */
+SET @query = '';
+SELECT @query = @query + 'EXEC sp_rename @objname ='''+[itm].[tableName]+'.'+[itm].[indexName]+''', @newname = '''+[itm].[expectedIndexName_inp]+''';'+CHAR(13)+CHAR(10)
+FROM @indexesToMaintains [itm]
+WHERE [itm].[isToBeRenamed_comp] = 1
+;
+
+PRINT REPLICATE('-', 40);
+PRINT '-- execute sp_rename';
+PRINT REPLICATE('-', 40);
+PRINT @query;
+PRINT REPLICATE('-', 40);
+PRINT CHAR(13)+CHAR(10);
+
+IF @DoOnlyOutputStatement = 0
+BEGIN
+ EXECUTE(@query);
+END
+
+/* create indexe(s) */
+SET @query='';
+SELECT @query = @query + 'CREATE '
+ +CASE WHEN [itm].[isClustered_inp]=1 THEN 'CLUSTERED' ELSE 'NONCLUSTERED' END
+ +CASE WHEN [itm].[isUnique_inp]=1 THEN ' UNIQUE' ELSE '' END
+ +' INDEX '+[itm].[expectedIndexName_inp]
+ +' ON '+[itm].[schemaName]+'.'+[itm].[tableName]+'('+[itm].[columnsName_inp]+')'
+ + CASE
+ WHEN [itm].[includedColumns_inp] IS NOT NULL THEN ' INCLUDE ('+[itm].[includedColumns_inp]+')'
+ ELSE ''
+ END
+ +';'
+ +CHAR(13)+CHAR(10)
+FROM @indexesToMaintains [itm]
+WHERE (
+ [itm].[isToBeCreated_comp] = 1
+ OR [itm].[isToBeRecreated_comp] = 1
+)
+;
+
+PRINT REPLICATE('-', 40);
+PRINT '-- execute CREATE INDEX';
+PRINT REPLICATE('-', 40);
+PRINT @query;
+PRINT REPLICATE('-', 40);
+PRINT CHAR(13)+CHAR(10);
+
+IF @DoOnlyOutputStatement = 0
+BEGIN
+ EXECUTE(@query);
+END
+
+--ROLLBACK TRANSACTION;
+COMMIT TRANSACTION
diff --git a/OCTPDBA-414 - proc to align indexes/proc.sql b/OCTPDBA-414 - proc to align indexes/proc.sql
new file mode 100644
index 0000000..40eb451
--- /dev/null
+++ b/OCTPDBA-414 - proc to align indexes/proc.sql
@@ -0,0 +1,800 @@
+USE Arizona;
+GO
+IF OBJECT_ID('upd.alignIndexes') IS NOT NULL
+ DROP PROCEDURE [upd].alignIndexes;
+GO
+
+/*=============================================================================
+
+OCTPDBA-414
+This procedure is used to align indexes in a pharmacy against a template, stored in the table [arizona].[upd].[IndexesAlignementActions]
+
+Note that:
+ * Matching is always made from the columns of the index, never on the name of the index.
+ The reason is that we might have difference in the name of the index between several servers.
+ * If an index exists with the name A, but your list contains a similar index with the name B, index A will be renamed to B with sp_rename
+
+Parameters
+----------------------
+@in_debug
+Debug level. Default 0
+ 0 = no debug, execute commands
+ 1 = print commands and output a matrix showing the found state
+ 2 = only print commands and output a matrix showing the found state
+
+@in_dropUnreferencedIndexes
+Drop indexes not referenced. Default 0
+ This flag govern behavior when we have a index on a table that exists in [IndexesAlignementActions], but that this specific index is not present in [IndexesAlignementActions]
+ 0 = Leave the unknown index in place
+ 1 = Drop the unknown index
+
+Context
+----------------------
+This proc can be called at anytime to align indexes against those referenced in [arizona].[upd].[IndexesAlignementActions]
+
+Creation : 03.02.2023 / TSC
+Modifications:
+
+=============================================================================*/
+CREATE PROCEDURE [upd].[alignIndexes]
+ @in_debug INT = 0,
+ @in_dropUnreferencedIndexes BIT = 0
+AS
+BEGIN
+ SET NOCOUNT ON;
+
+ /* variables */
+ DECLARE @query VARCHAR(MAX); /* for dynamic sql */
+ DECLARE @outputStatement BIT = CASE /* Do we want to have the commands printed out ? */
+ WHEN @in_debug IN ( 1, 2 ) THEN
+ 1
+ ELSE
+ 0
+ END;
+ DECLARE @executeStatement BIT = CASE /* Do we want to execute the commands ? */
+ WHEN @in_debug IN ( 0, 1 ) THEN
+ 1
+ ELSE
+ 0
+ END;
+ DECLARE @schemaName VARCHAR(100); /* used in cursor */
+ DECLARE @tableName VARCHAR(100); /* used in cursor */
+ DECLARE @indexFK INT; /* used in cursor */
+ DECLARE @msg VARCHAR(MAX) = '';
+ DECLARE @indexesToMaintains TABLE
+ (
+ [IA_indexesAlignementActions] INT NULL, /* FK to table upd.IA_IndexesAlignementActions */
+ [SchemaName] VARCHAR(100) NOT NULL, /* the schema the table is part of */
+ [TableName] VARCHAR(100) NOT NULL, /* On which table is the index, whithout the schema */
+ columnsName_inp VARCHAR(MAX) NOT NULL, /* list all the columns of the index, in the correct orders */
+ IA_index_options VARCHAR(MAX) NULL, /* index options */
+ isClustered_inp BIT NOT NULL
+ DEFAULT 0, /* Is the indexe a clustered index ? */
+ isUnique_inp BIT NOT NULL
+ DEFAULT 0, /* Is the index unique ? */
+ includedColumns_inp VARCHAR(MAX) NULL, /* list all the included columns the index should have. only relevant for idx not to be dropped */
+ isToBeDeleted_inp BIT NOT NULL
+ DEFAULT 0, /* must the script drop this index ? */
+ isToBeRecreated_inp BIT NOT NULL
+ DEFAULT 0, /* must the script recreate this index ?
+ If an existing index differs from the definition, it will be dropped and the correct one created.
+ Use this only to force the re-creation even if the structure is identical */
+ expectedIndexName_inp VARCHAR(MAX) NULL, /* the name the index should have, used to determine if a rename of the existing index should be done */
+ indexName VARCHAR(MAX) NULL, /* computed by the script. The index name on this system, as indexes name can be different accross systems*/
+ isIndexFound_comp BIT NOT NULL
+ DEFAULT 0, /* computed by the script. set to 1 if the index is present on the server */
+ isToBeCreated_comp BIT NULL
+ DEFAULT 0, /* computed by the script. does this index will be created on the server ? */
+ isToBeRenamed_comp BIT NULL
+ DEFAULT 0, /* computed by the script. does this index will be renamed ? */
+ isToBeDeleted_comp BIT NULL
+ DEFAULT 0, /* computed by the script. does this index will be deleted ? */
+ isToBeRecreated_comp BIT NULL
+ DEFAULT 0, /* computed by the script. does this index will be re-created ? */
+ includedColumnsMatch_internal BIT NULL, /* computed ba the script. Are the expected and actual included columns identical ? */
+ actualColumns_internal VARCHAR(MAX) NULL, /* the actual columns in the existing index */
+ actualIncludedColumns_internal VARCHAR(MAX) NULL, /* the actual columns in the INCLUDE part of the index */
+ statusMsg_internal VARCHAR(MAX) NULL /* Message, used for debug */
+ );
+
+
+ /* fetch index to align from upd.IA_IndexesAlignementActions */
+ INSERT INTO @indexesToMaintains
+ (
+ [IA_indexesAlignementActions],
+ [SchemaName],
+ [TableName],
+ expectedIndexName_inp,
+ columnsName_inp,
+ includedColumns_inp,
+ isClustered_inp,
+ isUnique_inp,
+ isToBeDeleted_inp,
+ isToBeRecreated_inp,
+ IA_index_options
+ )
+ SELECT ia.[IA_indexesAlignementActions_id],
+ ia.[IA_schema_name],
+ ia.[IA_table_name],
+ ia.[IA_expected_index_name],
+ ia.[IA_columns_name],
+ ia.[IA_included_columns],
+ ia.[IA_is_clustered],
+ ia.[IA_is_unique],
+ ia.[IA_is_to_be_deleted],
+ ia.[IA_is_to_be_recreated],
+ ia.IA_index_options
+ FROM [upd].[IA_IndexesAlignementActions] ia
+ WHERE ia.[IA_executionDate] IS NULL;
+
+
+ /* logic checks on index definition table */
+ SELECT @msg
+ = @msg + 'Duplicate index (on expected index name) found in indexes definition. Table ['
+ + [itm].[IA_schema_name] + '].[' + [itm].[IA_table_name] + '], expected index name ['
+ + [itm].[IA_expected_index_name] + ']' + CHAR(13) + CHAR(10)
+ FROM [upd].[IA_IndexesAlignementActions] [itm]
+ JOIN
+ (
+ SELECT [ii].[IA_expected_index_name] AS [key]
+ FROM [upd].[IA_IndexesAlignementActions] [ii]
+ GROUP BY [ii].[IA_expected_index_name]
+ HAVING COUNT(1) > 1
+ ) d
+ ON d.[key] = [itm].[IA_expected_index_name]
+ GROUP BY [itm].[IA_schema_name],
+ [itm].[IA_table_name],
+ [itm].[IA_expected_index_name];
+
+ --duplicate index key
+ SELECT @msg
+ = @msg + 'Duplicate index (on column definition) found in indexes definition. Table [' + [itm].[IA_schema_name]
+ + '].[' + [itm].[IA_table_name] + '], columns in index: ' + [itm].[IA_columns_name]
+ + CASE
+ WHEN [itm].[IA_included_columns] IS NOT NULL THEN
+ ', included colum(s): ' + [itm].[IA_included_columns]
+ ELSE
+ ''
+ END + CHAR(13) + CHAR(10)
+ FROM [upd].[IA_IndexesAlignementActions] [itm]
+ JOIN
+ (
+ SELECT [ii].[IA_columns_name] + '_' + ISNULL([ii].[IA_included_columns], '') AS [key]
+ FROM [upd].[IA_IndexesAlignementActions] [ii]
+ GROUP BY [ii].[IA_columns_name] + '_' + ISNULL([ii].[IA_included_columns], '')
+ HAVING COUNT(1) > 1
+ ) d
+ ON d.[key] = [itm].[IA_columns_name] + '_' + ISNULL([itm].[IA_included_columns], '')
+ GROUP BY [itm].[IA_schema_name],
+ [itm].[IA_table_name],
+ [itm].[IA_columns_name],
+ [itm].[IA_included_columns];
+
+ IF @msg <> ''
+ BEGIN
+ RAISERROR(@msg, 16, 4);
+ IF @@TRANCOUNT > 0
+ BEGIN
+ ROLLBACK TRANSACTION;
+ END;
+ RETURN 1;
+ END;
+
+
+ /* fetch the indexes name and non listed indexes on the current instance */
+ DECLARE curIdxName CURSOR FAST_FORWARD READ_ONLY FOR
+ SELECT DISTINCT
+ [itm].[IA_schema_name],
+ [itm].[IA_table_name],
+ itm.[IA_indexesAlignementActions_id]
+ FROM [upd].[IA_IndexesAlignementActions] [itm];
+
+ OPEN curIdxName;
+
+ FETCH NEXT FROM curIdxName
+ INTO @schemaName,
+ @tableName,
+ @indexFK;
+
+ WHILE @@FETCH_STATUS = 0
+ BEGIN
+ /* map the list to the actual indexes */
+ WITH ColInfo
+ AS (SELECT o.[name] AS TblName,
+ s.[name] + '.' + o.[name] AS SchemaTbl,
+ i.[name] AS IndexName,
+ i.[is_primary_key] AS IsPrimaryKey,
+ i.[is_unique_constraint] AS IsUniqueConstraint,
+ i.[is_unique] AS IsUnique,
+ c.[name] AS ColName,
+ c.[is_computed] AS IsComputedCol,
+ ic.[is_included_column] AS IsIncludedCol,
+ ic.[key_ordinal],
+ i.[filter_definition] AS FilterDefinition,
+ i.type AS indexType /* 1=clustered, 2=non clustered */
+ FROM [sys].[objects] o
+ INNER JOIN [sys].[schemas] s
+ ON o.schema_id = s.schema_id
+ INNER JOIN [sys].[columns] c
+ ON o.object_id = c.object_id
+ INNER JOIN [sys].[indexes] i
+ ON c.object_id = i.object_id
+ INNER JOIN [sys].[index_columns] ic
+ ON i.[index_id] = ic.[index_id]
+ AND o.object_id = ic.object_id
+ AND c.[column_id] = ic.[column_id])
+ UPDATE [itm]
+ SET [itm].[indexName] = i.[name],
+ [itm].[includedColumnsMatch_internal] = CASE
+ WHEN ISNULL([itm].[includedColumns_inp], '') = ISNULL(
+ [idx_cols].[includedColumns],
+ ''
+ ) THEN
+ 1
+ ELSE
+ 0
+ END,
+ [itm].[actualIncludedColumns_internal] = [idx_cols].[includedColumns],
+ [itm].[actualColumns_internal] = [idx_cols].[IndexColumns],
+ [itm].[isIndexFound_comp] = 1,
+ [itm].[isToBeCreated_comp] = 0,
+ [itm].[isToBeRecreated_comp] = CASE
+ WHEN idx_cols.indexType <> 1
+ AND [itm].isClustered_inp = 1
+ AND idx_cols.IsPrimaryKey = 0 THEN
+ 1 /* existing index is not clustered and not the PK, recreate */
+ ELSE
+ 0
+ END
+ FROM [sys].[indexes] AS i WITH (NOLOCK)
+ INNER JOIN [sys].[objects] o WITH (NOLOCK)
+ ON i.object_id = o.object_id
+ OUTER APPLY
+ (
+ SELECT DISTINCT
+ x.TblName,
+ x.IndexName,
+ x.IsPrimaryKey,
+ x.IsUniqueConstraint,
+ x.IsUnique,
+ c.IndexColumns,
+ ci.includedColumns,
+ cc.ComputedColumns,
+ x.FilterDefinition,
+ x.indexType
+ FROM ColInfo x
+ CROSS APPLY
+ (
+ SELECT STUFF(sq.strXML, 1, 2, '') AS IndexColumns
+ FROM
+ (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsIncludedCol = 0
+ ORDER BY x2.[key_ordinal]
+ FOR XML PATH('')
+ ) sq(strXML)
+ ) c
+ OUTER APPLY
+ (
+ SELECT STUFF(sq.strXML, 1, 2, '') AS includedColumns
+ FROM
+ (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsIncludedCol = 1
+ ORDER BY x2.[key_ordinal]
+ FOR XML PATH('')
+ ) sq(strXML)
+ ) ci
+ OUTER APPLY
+ (
+ SELECT STUFF(sq.strXML, 1, 2, '') AS ComputedColumns
+ FROM
+ (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsComputedCol = 1
+ ORDER BY x2.[key_ordinal]
+ FOR XML PATH('')
+ ) sq(strXML)
+ ) cc
+ WHERE x.TblName = o.[name]
+ AND x.IndexName = i.[name]
+ ) idx_cols
+ LEFT OUTER JOIN
+ (
+ SELECT SCHEMA_NAME(tab.schema_id) + '.' + tab.[name] AS [table],
+ col.[column_id],
+ col.[name] AS [COLUMN_NAME],
+ CASE
+ WHEN fk.object_id IS NOT NULL THEN
+ '>-'
+ ELSE
+ NULL
+ END AS rel,
+ SCHEMA_NAME(pk_tab.schema_id) + '.' + pk_tab.[name] AS primary_table,
+ pk_col.[name] AS pk_column_name,
+ fk_cols.[constraint_column_id] AS NO,
+ fk.[name] AS fk_constraint_name,
+ tab.[name] AS tbl_name
+ FROM [sys].[tables] tab
+ INNER JOIN [sys].[columns] col
+ ON col.object_id = tab.object_id
+ LEFT OUTER JOIN [sys].[foreign_key_columns] fk_cols
+ ON fk_cols.[parent_object_id] = tab.object_id
+ AND fk_cols.[parent_column_id] = col.[column_id]
+ LEFT OUTER JOIN [sys].[foreign_keys] fk
+ ON fk.object_id = fk_cols.[constraint_object_id]
+ LEFT OUTER JOIN [sys].[tables] pk_tab
+ ON pk_tab.object_id = fk_cols.[referenced_object_id]
+ LEFT OUTER JOIN [sys].[columns] pk_col
+ ON pk_col.[column_id] = fk_cols.[referenced_column_id]
+ AND pk_col.object_id = fk_cols.[referenced_object_id]
+ WHERE fk.object_id IS NOT NULL
+ ) fk
+ ON fk.tbl_name = o.[name]
+ AND idx_cols.IndexColumns LIKE '%' + fk.[COLUMN_NAME] + '%'
+ INNER JOIN @indexesToMaintains [itm]
+ ON itm.[SchemaName] = @schemaName
+ AND itm.[TableName] = @tableName
+ AND itm.[columnsName_inp] COLLATE Latin1_General_CI_AI = [idx_cols].[IndexColumns] COLLATE Latin1_General_CI_AI
+ AND ISNULL([itm].[includedColumns_inp], '')COLLATE Latin1_General_CI_AI = ISNULL(
+ [idx_cols].[includedColumns],
+ ''
+ )COLLATE Latin1_General_CI_AI
+ WHERE o.type = 'U' -- user table
+ --AND i.[index_id] = s.[index_id]
+ --AND s.[database_id] = DB_ID()
+ AND o.[name] = @tableName
+ AND SCHEMA_NAME(o.schema_id) = @schemaName
+ OPTION (RECOMPILE);
+
+
+ /* Add the indexes not in the list but present on the server to the list */
+ WITH ColInfo
+ AS (SELECT o.[name] AS TblName,
+ SCHEMA_NAME(o.[schema_id]) AS [SchemaName],
+ s.[name] + '.' + o.[name] AS SchemaTbl,
+ i.[name] AS IndexName,
+ i.[is_primary_key] AS IsPrimaryKey,
+ i.[is_unique_constraint] AS IsUniqueConstraint,
+ i.[is_unique] AS IsUnique,
+ c.[name] AS ColName,
+ c.[is_computed] AS IsComputedCol,
+ ic.[is_included_column] AS IsIncludedCol,
+ ic.[key_ordinal],
+ i.[filter_definition] AS FilterDefinition
+ FROM [sys].[objects] o
+ INNER JOIN [sys].[schemas] s
+ ON o.schema_id = s.schema_id
+ INNER JOIN [sys].[columns] c
+ ON o.object_id = c.object_id
+ INNER JOIN [sys].[indexes] i
+ ON c.object_id = i.object_id
+ INNER JOIN [sys].[index_columns] ic
+ ON i.[index_id] = ic.[index_id]
+ AND o.object_id = ic.object_id
+ AND c.[column_id] = ic.[column_id])
+ INSERT INTO @indexesToMaintains
+ (
+ [SchemaName],
+ [TableName],
+ [columnsName_inp],
+ [indexName],
+ [isToBeDeleted_inp],
+ [isToBeDeleted_comp],
+ [isToBeRecreated_inp],
+ [statusMsg_internal],
+ [actualIncludedColumns_internal],
+ [actualColumns_internal],
+ [isIndexFound_comp],
+ [isToBeCreated_comp],
+ [expectedIndexName_inp]
+ )
+ SELECT DISTINCT
+ @schemaName AS [SchemaName],
+ @tableName AS [TableName],
+ c.[IndexColumns] AS [columnsName],
+ x.[IndexName] AS indexName,
+ 0 AS [isToBeDeleted_inp],
+ CASE
+ WHEN EXISTS
+ (
+ SELECT 1
+ FROM @indexesToMaintains [itm]
+ WHERE itm.[expectedIndexName_inp] = x.[IndexName]
+ OR ISNULL(itm.[columnsName_inp], '') <> ISNULL(itm.[actualColumns_internal], '')
+ OR ISNULL(itm.[includedColumns_inp], '') <> ISNULL(
+ itm.[actualIncludedColumns_internal],
+ ''
+ )
+ ) THEN
+ 1
+ WHEN @in_dropUnreferencedIndexes = 1 THEN
+ 1
+ ELSE
+ 0
+ END AS [isToBeDeleted_comp],
+ 0 AS [isToBeRecreated_inp],
+ CASE
+ WHEN EXISTS
+ (
+ SELECT 1
+ FROM @indexesToMaintains [itm]
+ WHERE itm.[expectedIndexName_inp] = x.[IndexName]
+ OR ISNULL(itm.[columnsName_inp], '') <> ISNULL(itm.[actualColumns_internal], '')
+ OR ISNULL(itm.[includedColumns_inp], '') <> ISNULL(
+ itm.[actualIncludedColumns_internal],
+ ''
+ )
+ ) THEN
+ 'Index present locally not as expected, drop before creation'
+ WHEN @in_dropUnreferencedIndexes = 1 THEN
+ 'Index present locally only'
+ ELSE
+ NULL
+ END AS [statusMsg_internal],
+ ci.[IncludedColumns] AS [actualIncludedColumns_internal],
+ c.[IndexColumns] AS [actualColumns_internal],
+ 1 AS [isIndexFound_comp],
+ 0 AS [isToBeCreated_comp],
+ x.[IndexName] AS [expectedIndexName_inp]
+ FROM ColInfo x
+ CROSS APPLY
+ (
+ SELECT IndexColumns = STUFF(sq.strXML, 1, 2, '')
+ FROM
+ (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsIncludedCol = 0
+ ORDER BY x2.[key_ordinal]
+ FOR XML PATH('')
+ ) sq(strXML)
+ ) c
+ OUTER APPLY
+ (
+ SELECT IncludedColumns = STUFF(sq.strXML, 1, 2, '')
+ FROM
+ (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsIncludedCol = 1
+ ORDER BY x2.[key_ordinal]
+ FOR XML PATH('')
+ ) sq(strXML)
+ ) ci
+ OUTER APPLY
+ (
+ SELECT ComputedColumns = STUFF(sq.strXML, 1, 2, '')
+ FROM
+ (
+ SELECT ', ' + ISNULL(x2.ColName, '')
+ FROM ColInfo x2
+ WHERE x.TblName = x2.TblName
+ AND x.IndexName = x2.IndexName
+ AND x2.IsComputedCol = 1
+ ORDER BY x2.[key_ordinal]
+ FOR XML PATH('')
+ ) sq(strXML)
+ ) cc
+ LEFT OUTER JOIN
+ (
+ SELECT SCHEMA_NAME(tab.schema_id) + '.' + tab.[name] AS [table],
+ col.[column_id],
+ col.[name] AS [COLUMN_NAME],
+ CASE
+ WHEN fk.object_id IS NOT NULL THEN
+ '>-'
+ ELSE
+ NULL
+ END AS rel,
+ SCHEMA_NAME(pk_tab.schema_id) + '.' + pk_tab.[name] AS primary_table,
+ pk_col.[name] AS pk_column_name,
+ fk_cols.[constraint_column_id] AS NO,
+ fk.[name] AS fk_constraint_name,
+ tab.[name] AS tbl_name
+ FROM [sys].[tables] tab
+ INNER JOIN [sys].[columns] col
+ ON col.object_id = tab.object_id
+ LEFT OUTER JOIN [sys].[foreign_key_columns] fk_cols
+ ON fk_cols.[parent_object_id] = tab.object_id
+ AND fk_cols.[parent_column_id] = col.[column_id]
+ LEFT OUTER JOIN [sys].[foreign_keys] fk
+ ON fk.object_id = fk_cols.[constraint_object_id]
+ LEFT OUTER JOIN [sys].[tables] pk_tab
+ ON pk_tab.object_id = fk_cols.[referenced_object_id]
+ LEFT OUTER JOIN [sys].[columns] pk_col
+ ON pk_col.[column_id] = fk_cols.[referenced_column_id]
+ AND pk_col.object_id = fk_cols.[referenced_object_id]
+ WHERE fk.object_id IS NOT NULL
+ ) fk
+ ON fk.tbl_name = x.[TblName]
+ AND [c].[IndexColumns] LIKE '%' + fk.[COLUMN_NAME] + '%'
+ WHERE x.[SchemaName] = @schemaName
+ AND x.[TblName] = @tableName
+ AND NOT EXISTS
+ (
+ SELECT 1
+ FROM @indexesToMaintains [itm2]
+ WHERE 1 = 1
+ AND ISNULL(itm2.[actualColumns_internal], '') = ISNULL(c.[IndexColumns], '')
+ AND ISNULL(itm2.[actualIncludedColumns_internal], '') = ISNULL(ci.[IncludedColumns], '')
+ )
+ OPTION (RECOMPILE);
+
+
+ FETCH NEXT FROM curIdxName
+ INTO @schemaName,
+ @tableName,
+ @indexFK;
+ END;
+
+ CLOSE curIdxName;
+ DEALLOCATE curIdxName;
+
+
+ /* Adjust the "_comp" flags to create a matrix of actions */
+ /* to be created */
+ UPDATE [itm]
+ SET [itm].[isToBeCreated_comp] = CASE
+ WHEN [itm].[isToBeDeleted_inp] = 0 THEN
+ 1
+ ELSE
+ 0
+ END
+ FROM @indexesToMaintains [itm]
+ WHERE [itm].[indexName] IS NULL /* index was not found on the server */
+ AND [itm].[expectedIndexName_inp] IS NOT NULL /* we did gave an index name, ie: we want to create it if missing */
+ ;
+
+ /* to be renamed */
+ UPDATE [itm]
+ SET [itm].[isToBeRenamed_comp] = 1
+ FROM @indexesToMaintains [itm]
+ WHERE [itm].[indexName] IS NOT NULL /* index was not found on the server */
+ AND [itm].[expectedIndexName_inp] IS NOT NULL /* we did gave an index name, ie: we expect that index to be present */
+ AND [indexName] <> [itm].[expectedIndexName_inp]
+ AND [isToBeDeleted_inp] = 0
+ AND [isToBeDeleted_comp] = 0
+ AND [isToBeRecreated_inp] = 0
+ AND [isToBeRecreated_comp] = 0;
+
+ /* to be re-created */
+ UPDATE [itm]
+ SET [itm].[isToBeRecreated_comp] = 1
+ FROM @indexesToMaintains [itm]
+ WHERE [isToBeRecreated_inp] = 1;
+
+ --/* to be re-created because wrong index type*/
+ --UPDATE [itm]
+ --SET [itm].[isToBeRecreated_comp] = 1
+ --FROM @indexesToMaintains [itm]
+ --WHERE [itm].isClustered_inp = 1
+ --AND itm.;
+
+ /* to be deleted, because specified in table */
+ UPDATE itm
+ SET [itm].[isToBeDeleted_comp] = CASE
+ WHEN [itm].[isIndexFound_comp] = 0 THEN
+ 0
+ ELSE
+ 1
+ END,
+ [itm].[isToBeRecreated_comp] = 0, /* deletion override re-create */
+ [itm].[isToBeRenamed_comp] = 0 /* deletion override rename */
+ FROM @indexesToMaintains [itm]
+ WHERE [itm].[isToBeDeleted_inp] = 1;
+
+ /* to be deleted, because different to specs. link on index name */
+ UPDATE [exp]
+ SET [exp].[isToBeCreated_comp] = 1 /* flag the expected index "to be created" */
+ FROM @indexesToMaintains [exp] --expected
+ JOIN @indexesToMaintains [act] --actual
+ ON [act].[indexName] = [exp].[expectedIndexName_inp]
+ WHERE [exp].[isToBeDeleted_comp] = 0
+ AND [exp].[isToBeCreated_comp] = 0
+ AND [exp].[isToBeRenamed_comp] = 0
+ AND [exp].[isToBeRecreated_inp] = 0
+ AND
+ (
+ [exp].[columnsName_inp] != [act].[actualColumns_internal]
+ OR [exp].[includedColumns_inp] != [act].[actualIncludedColumns_internal]
+ );
+
+ UPDATE [act]
+ SET [act].[isToBeDeleted_comp] = 1 /* flag the actual index "to be deleted" */
+ FROM @indexesToMaintains [exp] --expected
+ JOIN @indexesToMaintains [act] --actual
+ ON [act].[indexName] = [exp].[expectedIndexName_inp]
+ WHERE (
+ [exp].[columnsName_inp] != [act].[actualColumns_internal]
+ OR [exp].[includedColumns_inp] != [act].[actualIncludedColumns_internal]
+ );
+
+ /* to be deleted, because different to specs. link on index columns */
+ UPDATE [exp]
+ SET [exp].[isToBeCreated_comp] = 1 /* flag the expected index "to be created" */
+ FROM @indexesToMaintains [exp] --expected
+ JOIN @indexesToMaintains [act] --actual
+ ON [act].[actualColumns_internal] = [exp].[columnsName_inp]
+ WHERE (
+ [exp].[columnsName_inp] != [act].[actualColumns_internal]
+ OR [exp].[includedColumns_inp] != [act].[actualIncludedColumns_internal]
+ );
+
+ UPDATE [act]
+ SET [act].[isToBeDeleted_comp] = 1 /* flag the actual index "to be deleted" */
+ FROM @indexesToMaintains [exp] --expected
+ JOIN @indexesToMaintains [act] --actual
+ ON [act].[actualColumns_internal] = [exp].[columnsName_inp]
+ WHERE (
+ [exp].[columnsName_inp] != [act].[actualColumns_internal]
+ OR [exp].[includedColumns_inp] != [act].[actualIncludedColumns_internal]
+ );
+
+ /* if we have both "rename" and "delete" actions, remove the "rename" action */
+ UPDATE @indexesToMaintains
+ SET [isToBeRenamed_comp] = 0
+ WHERE [isToBeRenamed_comp] = 1
+ AND [isToBeDeleted_comp] = 1;
+
+ /* ensure that we don't have clash between indexes to create and indexes to rename */
+ UPDATE ir
+ SET [ir].[isToBeRenamed_comp] = 0, /* do not rename this index */
+ [ir].[isToBeDeleted_inp] = 1 /* drop this index instead, as we have one with the correct structure about to be created */
+ FROM @indexesToMaintains [ic] /* to create */
+ JOIN @indexesToMaintains [ir] /* to rename */
+ ON ic.[expectedIndexName_inp] = ir.[expectedIndexName_inp]
+ WHERE [ic].[isToBeCreated_comp] = 1
+ AND [ir].[isToBeRenamed_comp] = 1;
+
+
+ /* Show the action matrix */
+ IF @in_debug > 0
+ BEGIN
+ SELECT [itm].[isIndexFound_comp],
+ [itm].[isToBeCreated_comp],
+ [itm].[isToBeRenamed_comp],
+ [itm].[isToBeDeleted_comp],
+ [itm].[isToBeRecreated_comp],
+ [itm].[statusMsg_internal],
+ [itm].[IA_index_options],
+ '....' AS separator,
+ [itm].[isToBeDeleted_inp],
+ [itm].[isToBeRecreated_inp],
+ [itm].[indexName],
+ [itm].[expectedIndexName_inp],
+ [itm].[columnsName_inp],
+ [itm].[actualColumns_internal],
+ [itm].[includedColumns_inp],
+ [itm].[actualIncludedColumns_internal]
+ FROM @indexesToMaintains [itm]
+ ORDER BY [itm].[isIndexFound_comp],
+ [itm].[isToBeDeleted_inp],
+ [itm].[columnsName_inp];
+ END;
+
+
+ /* Drop the indexe(s) that are to be deleted or recreated */
+ SET @query = '';
+ SELECT @query
+ = @query + 'DROP INDEX ' + [itm].[indexName] + ' ON ' + [itm].[SchemaName] + '.' + [itm].[TableName] + ';'
+ + CHAR(13) + CHAR(10)
+ FROM @indexesToMaintains [itm]
+ WHERE [itm].[isToBeDeleted_comp] = 1
+ OR [itm].[isToBeRecreated_comp] = 1;
+
+ IF @outputStatement = 1
+ BEGIN
+ PRINT REPLICATE('-', 40);
+ PRINT '-- execute DROP INDEX';
+ PRINT REPLICATE('-', 40);
+ PRINT @query;
+ PRINT REPLICATE('-', 40);
+ PRINT CHAR(13) + CHAR(10);
+ END;
+
+ IF @executeStatement = 1
+ BEGIN
+ EXECUTE (@query);
+ END;
+
+
+ /* rename existing indexe(s) */
+ SET @query = '';
+ SELECT @query
+ = @query + 'EXEC sp_rename @objname =''' + [itm].[TableName] + '.' + [itm].[indexName] + ''', @newname = '''
+ + [itm].[expectedIndexName_inp] + ''';' + CHAR(13) + CHAR(10)
+ FROM @indexesToMaintains [itm]
+ WHERE [itm].[isToBeRenamed_comp] = 1;
+
+ IF @outputStatement = 1
+ BEGIN
+ PRINT REPLICATE('-', 40);
+ PRINT '-- execute sp_rename';
+ PRINT REPLICATE('-', 40);
+ PRINT @query;
+ PRINT REPLICATE('-', 40);
+ PRINT CHAR(13) + CHAR(10);
+ END;
+
+ IF @executeStatement = 1
+ BEGIN
+ EXECUTE (@query);
+ END;
+
+
+ /* create indexe(s) */
+ SET @query = '';
+ SELECT @query
+ = @query + 'CREATE ' + CASE
+ WHEN [itm].[isUnique_inp] = 1 THEN
+ 'UNIQUE '
+ ELSE
+ ''
+ END + CASE
+ WHEN [itm].[isClustered_inp] = 1 THEN
+ 'CLUSTERED'
+ ELSE
+ 'NONCLUSTERED'
+ END + ' INDEX ' + [itm].[expectedIndexName_inp] + ' ON ' + [itm].[SchemaName]
+ + '.' + [itm].[TableName] + '(' + [itm].[columnsName_inp] + ')'
+ + CASE
+ WHEN [itm].[includedColumns_inp] IS NOT NULL THEN
+ ' INCLUDE (' + [itm].[includedColumns_inp] + ')'
+ ELSE
+ ''
+ END + CHAR(13) + CHAR(10) + COALESCE('WITH(' + [itm].[IA_index_options] + ')' + CHAR(13) + CHAR(10), '')
+ + ';' + CHAR(13) + CHAR(10)
+ FROM @indexesToMaintains [itm]
+ WHERE (
+ [itm].[isToBeCreated_comp] = 1
+ OR [itm].[isToBeRecreated_comp] = 1
+ );
+
+ IF @outputStatement = 1
+ BEGIN
+ PRINT REPLICATE('-', 40);
+ PRINT '-- execute CREATE INDEX';
+ PRINT REPLICATE('-', 40);
+ PRINT @query;
+ PRINT REPLICATE('-', 40);
+ PRINT CHAR(13) + CHAR(10);
+ END;
+
+ IF @executeStatement = 1
+ BEGIN
+ EXECUTE (@query);
+ END;
+
+ /* record results in upd.IA_IndexesAlignementActions */
+ UPDATE ia
+ SET ia.[IA_executionDate] = CURRENT_TIMESTAMP,
+ ia.[IA_foundIndexName] = ii.indexName,
+ ia.[IA_wasIndexFound] = ii.isIndexFound_comp,
+ ia.[IA_wasCreated] = ii.isToBeCreated_comp,
+ ia.[IA_wasRenamed] = ii.isToBeRenamed_comp,
+ ia.[IA_wasDeleted] = ii.isToBeDeleted_comp,
+ ia.[IA_wasRecreated] = ii.isToBeRecreated_comp,
+ ia.[IA_includedColumnsMatch] = ii.includedColumnsMatch_internal,
+ ia.[IA_actualColumns] = ii.actualColumns_internal,
+ ia.[IA_actualIncludedColumns] = ii.actualIncludedColumns_internal,
+ ia.[IA_statusMsg] = ii.statusMsg_internal
+ FROM [upd].[IA_IndexesAlignementActions] ia
+ JOIN @indexesToMaintains ii
+ ON ii.[IA_indexesAlignementActions] = ia.[IA_indexesAlignementActions_id]
+ WHERE ia.[IA_executionDate] IS NULL;
+END;
+GO
diff --git a/OCTPDBA-414 - proc to align indexes/table.sql b/OCTPDBA-414 - proc to align indexes/table.sql
new file mode 100644
index 0000000..901b9e6
--- /dev/null
+++ b/OCTPDBA-414 - proc to align indexes/table.sql
@@ -0,0 +1,82 @@
+USE Arizona
+
+IF OBJECT_ID('upd.IA_IndexesAlignementActions') IS NOT NULL
+ DROP TABLE upd.IA_IndexesAlignementActions;
+GO
+
+CREATE TABLE upd.IA_IndexesAlignementActions(
+ IA_indexesAlignementActions_id INT NOT NULL IDENTITY(1,1)
+ ,IA_executionDate DATETIME2(0) NULL /* The date and time the action was executed, null if the action is to be executed */
+ ,IA_schema_name VARCHAR(100) NOT NULL /* the schema the table is part of */
+ ,IA_table_name VARCHAR(100) NOT NULL /* On which table is the index, whithout the schema */
+ ,IA_columns_name VARCHAR(MAX) NOT NULL /* list all the columns of the index, in the correct orders */
+ ,IA_is_clustered BIT NOT NULL /* Is the indexe a clustered index ? */
+ ,IA_is_unique BIT NOT NULL /* Is the index unique ? */
+ ,IA_included_columns VARCHAR(MAX)NULL /* list all the included columns the index should have. */
+ ,IA_index_options VARCHAR(MAX) NULL /* Give here the index options if any. they will be applied on index creation but they are not part of the delta checks */
+ ,IA_is_to_be_deleted BIT NOT NULL /* must the script drop this index ? */
+ ,IA_is_to_be_recreated BIT NOT NULL /* must the script recreate this index ?
+ If an existing index differs from the definition, it will be dropped and the correct one created.
+ Use this only to force the re-creation even if the structure is identical */
+ ,IA_expected_index_name VARCHAR(500) NOT NULL /* the name the index should have, used to determine if a rename of the existing index should be done */
+
+
+ /* everything below is a log of past changes */
+ ,[IA_foundIndexName] VARCHAR(MAX) NULL /* computed by the script. The index name on this system, as indexes name can be different accross systems*/
+ ,[IA_wasIndexFound] BIT NOT NULL /* computed by the script. set to 1 if the index is present on the server */
+ CONSTRAINT DF_IA_wasIndexFound DEFAULT 0
+ ,[IA_wasCreated] BIT NULL /* computed by the script. does this index was created on the server ? */
+ CONSTRAINT DF_IA_wasCreated DEFAULT 0
+ ,[IA_wasRenamed] BIT NULL /* computed by the script. does this index was renamed ? */
+ CONSTRAINT DF_IA_wasRenamed DEFAULT 0
+ ,[IA_wasDeleted] BIT NULL /* computed by the script. does this index will be deleted ? */
+ CONSTRAINT DF_IA_wasDeleted DEFAULT 0
+ ,[IA_wasRecreated] BIT NULL /* computed by the script. does this index will be re-created ? */
+ CONSTRAINT DF_IA_wasRecreated DEFAULT 0
+ ,[IA_includedColumnsMatch] BIT NULL /* computed by the script. Are the expected and actual included columns identical ? */
+ ,[IA_actualColumns] VARCHAR(MAX) NULL /* the actual columns in the existing index */
+ ,[IA_actualIncludedColumns] VARCHAR(MAX) NULL /* the actual columns in the INCLUDE part of the index */
+ ,[IA_statusMsg] VARCHAR(MAX) NULL /* Message, used for debug */
+ ,CONSTRAINT PK_IA_IndexesAlignementActions PRIMARY KEY(IA_indexesAlignementActions_id)
+);
+ALTER TABLE upd.IA_IndexesAlignementActions ADD CONSTRAINT DF_IA_is_clustered DEFAULT 0 FOR IA_is_clustered;
+ALTER TABLE upd.IA_IndexesAlignementActions ADD CONSTRAINT DF_IA_is_unique DEFAULT 0 FOR IA_is_unique;
+ALTER TABLE upd.IA_IndexesAlignementActions ADD CONSTRAINT DF_IA_is_to_be_deleted DEFAULT 0 FOR IA_is_to_be_deleted;
+ALTER TABLE upd.IA_IndexesAlignementActions ADD CONSTRAINT DF_IA_is_to_be_recreated DEFAULT 0 FOR IA_is_to_be_recreated;
+
+CREATE UNIQUE NONCLUSTERED INDEX NCUIX_IA_IndexesAlignementActions_index_name ON upd.IA_IndexesAlignementActions(IA_expected_index_name);
+GO
+
+INSERT INTO upd.IA_IndexesAlignementActions (
+ IA_columns_name,
+ IA_is_to_be_deleted,
+ IA_is_to_be_recreated,
+ IA_expected_index_name,
+ IA_included_columns,
+ [IA_schema_name],
+ [IA_table_name],
+ [IA_is_clustered],
+ [IA_is_unique]
+)
+/* indexe(s) we do want */
+VALUES('Entry_id',0,0,'PK_Entry_id', NULL,'dbo','entry',0,0)
+,('ET_batch_run',0,0,'NCIX_Entry_COL_ET_batch_run',NULL,'dbo','entry',0,0)
+,('ET_accounting_period',0,0,'NCIX_Entry_COL_ET_accounting_period','Entry_ID','dbo','entry',0,0)
+,('ET_document_header',0,0,'NCIX_Entry_COL_ET_document_header','ET_debit_currency_amount, ET_credit_currency_amount','dbo','entry',0,0)
+,('ET_account, ET_document_header',0,0,'NCIX_Entry_COL_ET_account','Entry_ID','dbo','entry',0,0)
+,('ET_reconciliation_status, ET_account, ET_document_header',0,0,'NCIX_Entry_COL_ET_reconciliation_status','ET_debit_base_amount, ET_credit_base_amount, ET_reconciliation_base_amount','dbo','entry',0,0)
+,('ET_predefined_entry',0,0,'NCIX_Entry_COL_ET_predefined_entry',NULL,'dbo','entry',0,0)
+,('ET_entry_address',0,0,'NCIX_Entry_COL_ET_entry_address',NULL,'dbo','entry',0,0)
+,('ET_currency',0,0,'NCIX_Entry_COL_ET_currency',NULL,'dbo','entry',0,0)
+
+/* indexe(s) used in central, even if not in pharmacies*/
+,('ET_entry_type',0,0,'NCIX_Entry_COL_ET_entry_type',NULL,'dbo','entry',0,0)
+
+/* indexe(s) we really want to drop*/
+,('ET_master_ID',1,0,'NCIX_Entry_COL_ET_master_ID',NULL,'dbo','entry',0,0)
+,('ET_bmc_user_profile',1,0,'NCIX_Entry_COL_ET_bmc_user_profile',NULL,'dbo','entry',0,0)
+,('ET_sales_tax_code',1,0,'NCIX_Entry_COL_ET_sales_tax_code',NULL,'dbo','entry',0,0)
+,('ET_APS_TS', 1, 0, 'NCIX_Entry_COL_ET_APS_TS',NULL,'dbo','entry',0,0)
+
+;
+
diff --git a/OCTPDBA-414 - proc to align indexes/test.sql b/OCTPDBA-414 - proc to align indexes/test.sql
new file mode 100644
index 0000000..ca18755
--- /dev/null
+++ b/OCTPDBA-414 - proc to align indexes/test.sql
@@ -0,0 +1,156 @@
+USE Arizona;
+
+BEGIN TRANSACTION;
+SET XACT_ABORT ON;
+
+
+INSERT INTO upd.IA_IndexesAlignementActions
+(
+ IA_executionDate,
+ IA_schema_name,
+ IA_table_name,
+ IA_columns_name,
+ IA_is_clustered,
+ IA_is_unique,
+ IA_included_columns,
+ IA_is_to_be_deleted,
+ IA_is_to_be_recreated,
+ IA_expected_index_name,
+ IA_foundIndexName,
+ IA_wasIndexFound,
+ IA_wasCreated,
+ IA_wasRenamed,
+ IA_wasDeleted,
+ IA_wasRecreated,
+ IA_includedColumnsMatch,
+ IA_actualColumns,
+ IA_actualIncludedColumns,
+ IA_statusMsg,
+ IA_index_options
+)
+SELECT
+ NULL AS IA_executionDate,
+ 'dbo' AS IA_schema_name,
+ 'Criteria' AS IA_table_name,
+ 'CR_code, CR_criteria_type' AS IA_columns_name,
+ 0 AS IA_is_clustered,
+ 1 AS IA_is_unique,
+ NULL AS IA_included_columns,
+ 0 AS IA_is_to_be_deleted,
+ 0 AS IA_is_to_be_recreated,
+ 'NCIX_Criteria_COL_CR_code' AS IA_expected_index_name,
+ NULL AS IA_foundIndexName,
+ 0 AS IA_wasIndexFound,
+ 0 AS IA_wasCreated,
+ 0 AS IA_wasRenamed,
+ 0 AS IA_wasDeleted,
+ 0 AS IA_wasRecreated,
+ NULL AS IA_includedColumnsMatch,
+ NULL AS IA_actualColumns,
+ NULL AS IA_actualIncludedColumns,
+ NULL AS IA_statusMsg ,
+ NULL AS IA_index_options
+UNION
+SELECT
+ NULL AS IA_executionDate,
+ 'dbo' AS IA_schema_name,
+ 'Criteria' AS IA_table_name,
+ 'CR_criteria_type' AS IA_columns_name,
+ 0 AS IA_is_clustered,
+ 0 AS IA_is_unique,
+ NULL AS IA_included_columns,
+ 0 AS IA_is_to_be_deleted,
+ 0 AS IA_is_to_be_recreated,
+ 'NCIX_Criteria_COL_CR_criteria_type' AS IA_expected_index_name,
+ NULL AS IA_foundIndexName,
+ 0 AS IA_wasIndexFound,
+ 0 AS IA_wasCreated,
+ 0 AS IA_wasRenamed,
+ 0 AS IA_wasDeleted,
+ 0 AS IA_wasRecreated,
+ NULL AS IA_includedColumnsMatch,
+ NULL AS IA_actualColumns,
+ NULL AS IA_actualIncludedColumns,
+ NULL AS IA_statusMsg ,
+ NULL AS IA_index_options
+UNION
+SELECT
+ NULL AS IA_executionDate,
+ 'dbo' AS IA_schema_name,
+ 'Criteria' AS IA_table_name,
+ 'CR_master_ID' AS IA_columns_name,
+ 0 AS IA_is_clustered,
+ 0 AS IA_is_unique,
+ NULL AS IA_included_columns,
+ 0 AS IA_is_to_be_deleted,
+ 01 AS IA_is_to_be_recreated,
+ 'NCIX_Criteria_COL_CR_master_ID' AS IA_expected_index_name,
+ NULL AS IA_foundIndexName,
+ 0 AS IA_wasIndexFound,
+ 0 AS IA_wasCreated,
+ 0 AS IA_wasRenamed,
+ 0 AS IA_wasDeleted,
+ 0 AS IA_wasRecreated,
+ NULL AS IA_includedColumnsMatch,
+ NULL AS IA_actualColumns,
+ NULL AS IA_actualIncludedColumns,
+ NULL AS IA_statusMsg,
+ NULL AS IA_index_options
+UNION
+SELECT
+ NULL AS IA_executionDate,
+ 'dbo' AS IA_schema_name,
+ 'Criteria' AS IA_table_name,
+ 'CR_VGUID' AS IA_columns_name,
+ 0 AS IA_is_clustered,
+ 0 AS IA_is_unique,
+ NULL AS IA_included_columns,
+ 0 AS IA_is_to_be_deleted,
+ 0 AS IA_is_to_be_recreated,
+ 'NCIX_Criteria_COL_CR_VGUID' AS IA_expected_index_name,
+ NULL AS IA_foundIndexName,
+ 0 AS IA_wasIndexFound,
+ 0 AS IA_wasCreated,
+ 0 AS IA_wasRenamed,
+ 0 AS IA_wasDeleted,
+ 0 AS IA_wasRecreated,
+ NULL AS IA_includedColumnsMatch,
+ NULL AS IA_actualColumns,
+ NULL AS IA_actualIncludedColumns,
+ NULL AS IA_statusMsg ,
+ NULL AS IA_index_options
+UNION
+SELECT
+ NULL AS IA_executionDate,
+ 'dbo' AS IA_schema_name,
+ 'Criteria' AS IA_table_name,
+ 'Criteria_ID' AS IA_columns_name,
+ 1 AS IA_is_clustered,
+ 1 AS IA_is_unique,
+ NULL AS IA_included_columns,
+ 0 AS IA_is_to_be_deleted,
+ 0 AS IA_is_to_be_recreated,
+ 'PK_Criteria_ID' AS IA_expected_index_name,
+ NULL AS IA_foundIndexName,
+ 0 AS IA_wasIndexFound,
+ 0 AS IA_wasCreated,
+ 0 AS IA_wasRenamed,
+ 0 AS IA_wasDeleted,
+ 0 AS IA_wasRecreated,
+ NULL AS IA_includedColumnsMatch,
+ NULL AS IA_actualColumns,
+ NULL AS IA_actualIncludedColumns,
+ NULL AS IA_statusMsg ,
+ NULL AS IA_index_options
+
+
+
+
+
+EXEC [upd].[alignIndexes] @in_debug = 01, -- int
+ @in_dropUnreferencedIndexes = NULL; -- bit
+
+SELECT *
+FROM upd.IA_IndexesAlignementActions;
+
+ROLLBACK TRANSACTION;
\ No newline at end of file