2017-06-15 6 views
0

J'ai une connexion ODBC à un système DB2 à partir de SQL Server. Je peux utiliser OPENQUERY pour sélectionner, insérer et supprimer des enregistrements de ma table prévue. Mais, je dois régulièrement supprimer tous les enregistrements d'une table et en essayant de supprimer tout le contenu, je reçois des erreurs sur les niveaux d'isolation, mais je pense que cela a à voir avec le nombre de lignes que je suis essayant de supprimer en même temps.Supprimer des enregistrements dans db2 à partir de SQL Server via odbc

Je peux boucler et supprimer environ 600 à la fois, mais c'est un hack pour l'instant.

Des suggestions sur comment faire plus efficacement cela?

erreur que je reçois:

fournisseur OLE DB « MSDASQL » pour le serveur lié « MY_SERVER » message retourné « Ni le niveau d'isolement ni un renforcement de celui-ci est pris en charge. ». Msg 7392, niveau 16, état 2, ligne 32
Impossible de démarrer une transaction pour le fournisseur OLE DB "MSDASQL" pour le serveur lié "MY_SERVER".

+0

vous pouvez utiliser OpenRowSet pour le faire alternativement. Mais assurez-vous d'avoir une bonne autorisation pour effectuer une action de suppression. –

Répondre

0

Si vous voulez vraiment supprimer tous les enregistrements de la table DB2 pourquoi ne pas essayer:

TRUNCATE TABLE <mytable> 

Je pense que vous pouvez exécuter via EXEC dans OLE DB (ce n'est pas ODBC) à l'aide quelque chose comme ceci:

EXEC <mylinkedserver.db>sp_executesql 'TRUNCATE TABLE <mytable>' 
+0

J'ai essayé ça mais je n'ai pas les privs pour ça. De plus, au moins dans le serveur sql, truncate ne fonctionnera pas s'il y a des tables avec un FK dans la table. Ce n'est pas le cas ici, mais c'est une raison courante pour laquelle tronquer n'est pas toujours une solution disponible. –