- Le Serveur lié ne fera pas plus que le Serveur auquel il est lié ! L'objet Serveur lié ne fait que émettre des demandes puis récupère des résultats fournis par le Serveur lié, en l'occurrence Access, si tenté que l'on puisse parler de "Serveur" pour Access !
- Même si vous arrivez à récupérer la définition des indexes, il vous faudra recréer sous SQL Server, les indexes, et ce, en ayant recours au SQL Dynamique, etc.
- Sous SQL Server les indexes sont des structures physiques, il ne s'agit pas uniquement de définitions ! Les différences entres Access et SQL Server se mesurent en années lumières ; un année lumière étant la distance parcourue par la lumière pendant la durée d'une année calendaire !
- Une solution plus simple pour vous, serait de procéder comme suit :
1 - Droper si elle existe la table CopieSQLTable1
2 - Créer et remplir, comme vous le faites déjà, la table CopieSQLTable1 :
SELECT * INTO CopieSQLTable1 FROM Monserveurlie...Table1
3 - Créer sous SQL Server la clé primaire et autres indexes appropriés (CLUSTERED ou NONCLUSTERED )
Exemple :
1 2 3 4 5
| ALTER TABLE dbo.CopieSQLTable1 ADD CONSTRAINT PK_CopieSQLTable1 PRIMARY KEY CLUSTERED (Col1 ASC, ... ) ;
GO
CREATE NONCLUSTERED INDEX IX_CopieSQLTable1_Col4_Col5.. ON dbo.CopieSQLTable1 (Col4, Col5 ...);
GO
Etc.. |
4 - Vous pouvez ensuite, regrouper ces traitements dans une procédure stockée puis programmer une tâche planifiée SQL Server qui exécute cette procédure à intervalle régulier (par exemple une fois par jour) pour actualiser automatiquement la table CopieSQLTable1 depuis la ou les sources de données Access (en l'occurrence Table1 sous Access).
Remarque : Un autre solution beaucoup plus optimale consiste à :
1 - Créer la table et les indexes une fois pour toute
1 2 3 4 5 6 7
| CREATE Table CopieSQLTable1 ( Col1 ..., Col2, ... )
GO
ALTER TABLE dbo.CopieSQLTable1 ADD CONSTRAINT PK_CopieSQLTable1 PRIMARY KEY CLUSTERED (Col1 ASC, ... ) ;
GO
CREATE NONCLUSTERED INDEX IX_CopieSQLTable1_Col4_Col5.. ON dbo.CopieSQLTable1 (Col4, Col5 ...);
GO
Etc. |
2 - Initialiser différemment la table CopieSQLTable1 par
1 2 3
| INSERT INTO CopieSQLTable1 (Col1, Col2, ... )
SELECT Clo1, Col2
FROM Monserveurlie...Table1 |
3 - Faire un MERGE de la table CopieSQLTable1 ( INSERT, UPDATE, DELETE) depuis la sources Table1 sous Access
4 - Encapsuler tout cela dans une une procédure stockée puis programmer une tâche planifiée qui s'exécute cette procédure à intervalle régulier.
A+
Partager