Question :
J’ai une table de données Access et une table SQL qui stockent des informations. Sous les fonctionnalités du serveur lié SQL 7.0, j’ai autorisé SQL à voir la base de données Access comme n’SQL données. J’ai également rédigé une procédure stockée qui copie les enregistrements de la table de données Access vers la table SQL données. S’exécutant à partir d’ISQL/Query Analyzer, la procédure stockée s’exécute et fonctionne correctement. L’appel de la procédure stockée à partir de Dextérité produit le message d’erreur suivant de SQL Server : les requêtes hétérogènes nécessitent que les options ANSI_NULLS et ANSI_WARNINGS soient définies pour la
connexion. Cela garantit une sémantique de requête cohérente. Activez ces options, puis réissuez votre requête. Puis-je même exécuter cette procédure stockée à partir de Dextérité ?
Réponse :
Oui, mais nous allons devoir modifier légèrement la procédure stockée. La raison pour laquelle l’opération échoue est que pour lire correctement les tables de dextérité, ces options doivent être désactivées de sorte que l’appel des procédures stockées dans la dextérité exécute ces commandes avant d’utiliser la procédure stockée. SQL L’utilisateur doit s’assurer que les données qui enfreignent ces règles ne sont pas introduites dans la table SQL données. Dans l’exemple ci-dessous, la table_access est la table Access. La table_test est la table SQL tableau.
if exists (select * from sysobjects where id =
object_id('dbo.access_update') and sysstat & 0xf = 4)
drop procedure dbo.access_update
GO
create procedure dbo.access_update @O_SQL_Error_State int = NULL output
as
INSERT INTO access_table ( DOCNUMBR, DOCAMNT )
SELECT access_test.DOCNUMBR, access_test.DOCAMNT
FROM access_test
GO
Nous pouvons modifier la procédure stockée pour définir nos avertissements comme ceci :
if exists (select * from sysobjects where id =
object_id('dbo.access_update') and sysstat & 0xf = 4)
drop procedure dbo.access_update
GO
create procedure dbo.access_update @O_SQL_Error_State int = NULL output
as
set ANSI_NULLS ON
SET ANSI_WARNINGS ON
exec access_table2 ( DOCNUMBR, DOCAMNT )
GO
Dans ce cas, la procédure stockée hérite des attributs de ce qu’elle appelle. Dans ce cas, la dextérité appelle theaccess_tableprocedure qui met en ANSI_NULLS & ANSI_WARNINGS puis appelle la procédure stockée réelle et passe dans nos paramètres.
Cet article était TechKnowknow Document ID:10011