Μετάβαση στο κύριο περιεχόμενο
Υποστήριξη
Είσοδος με Microsoft
Είσοδος ή δημιουργία λογαριασμού.
Γεια σας,
Επιλέξτε διαφορετικό λογαριασμό.
Έχετε πολλούς λογαριασμούς
Επιλέξτε τον λογαριασμό με τον οποίο θέλετε να εισέλθετε.

Ερώτηση:
Έχω ένα DB της Access και έναν SQL που αποθηκεύουν πληροφορίες. Στις δυνατότητες του Συνδεδεμένου διακομιστή SQL 7.0, έχω επιτρέψει στο SQL να βλέπει το DB της Access ως απλώς μια άλλη SQL δεδομένων. Έχω επίσης γράψει μια αποθηκευμένη διαδικασία που αντιγράφει εγγραφές από την Access DB στον SQL πίνακα. Η αποθηκευμένη διαδικασία εκτελείται από την ISQL/Query Analyzer και λειτουργεί σωστά. Η κλήση της αποθηκευμένης διαδικασίας από την Dexterity παράγει το ακόλουθο μήνυμα σφάλματος από το SQL Server: Τα ετερόκλητα ερωτήματα απαιτούν να ορίζετε τις επιλογές ANSI_NULLS και ANSI_WARNINGS για
τη σύνδεση. Αυτό εξασφαλίζει συνεπή σημασιτική ερωτήματος. Ενεργοποιήστε αυτές τις επιλογές και, στη συνέχεια, εκδοσή του ερωτήματός σας. Μπορώ ακόμη και να εκτελέσω αυτήν την αποθηκευμένη διαδικασία από το Dexterity;


Απάντηση:
Ναι, αλλά θα πρέπει να τροποποιήσουμε λίγο την αποθηκευμένη διαδικασία. Ο λόγος που αποτυγχάνει είναι ότι, για να διαβάσετε σωστά τους πίνακες του SQL στο Dexterity, αυτές οι επιλογές πρέπει να απενεργοποιηθούν, ώστε οι αποθηκευμένες διαδικασίες κλήσης στο Dexterity να αφορούν αυτές τις εντολές πριν από την εκτέλεση της αποθηκευμένης διαδικασίας. Ο χρήστης πρέπει να βεβαιωθεί ότι τα δεδομένα που παραβιάζουν αυτούς τους κανόνες δεν εισάγονται στον SQL πίνακα. Στο παρακάτω δείγμα, το table_access είναι ο πίνακας πρόσβασης. Το table_test είναι ο SQL πίνακας.

          
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



Μπορούμε να τροποποιήσουμε την αποθηκευμένη διαδικασία για να ορίστε τις προειδοποιήσεις μας ως εξής:

          
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



Σε αυτή την περίπτωση, στην αποθηκευμένη διαδικασία μεταβιβάζονται τα χαρακτηριστικά αυτού που την αποκαλεί. Για αυτή την περίπτωση, η κινητικότητα theaccess_tableprocedure το οποίο ενεργοποιεί το ANSI_NULLS & ANSI_WARNINGS και, στη συνέχεια, καλεί την πραγματική αποθηκευμένη διαδικασία και περνά στις παραμέτρους μας.


Αυτό το άρθρο ήταν Αναγνωριστικό εγγράφου TechKnowledge:10011

Περιεχόμενο TechKnowledge

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

Εξερευνήστε τα πλεονεκτήματα της συνδρομής, περιηγηθείτε σε εκπαιδευτικά σεμινάρια, μάθετε πώς μπορείτε να προστατεύσετε τη συσκευή σας και πολλά άλλα.

Οι κοινότητες σάς βοηθούν να κάνετε και να απαντάτε σε ερωτήσεις, να δίνετε σχόλια και να ακούτε από ειδικούς με πλούσια γνώση.

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με τη γλωσσική ποιότητα;
Τι επηρέασε την εμπειρία σας;
Πατώντας "Υποβολή" τα σχόλια σας θα χρησιμοποιηθούν για τη βελτίωση των προϊόντων και των υπηρεσιών της Microsoft. Ο διαχειριστής IT θα έχει τη δυνατότητα να συλλέξει αυτά τα δεδομένα. Δήλωση προστασίας προσωπικών δεδομένων.

Σας ευχαριστούμε για τα σχόλιά σας!

×