SQLCommand ExecuteNonQuery Maximum CommandText Longueur?

J'ai cherché autour de l'internet et tout semble être sur les champs de l'individu ou de faire un insert. J'ai un outil de migration qui est la migration d'un ancien héritage de la base de données (superbase) à notre DB SQL server (2008). Actuellement, je suis en train de lire 20 000 enregistrements à partir de l'ancienne base de données et de générer un grand SQLCommand.CommandText chaîne avec 20 000 insérer des déclarations séparées par un point-virgule. Cela fonctionne bien. Mais puis-je faire 25k? 30k? J'ai essayé de ne pas avoir de limite à tout, mais quand j'ai essayé d'exécuter ExecuteNonQuery avec un CommandText contenant plus de 4 millions d'INSÉRER des déclarations, il a dit quelque chose à propos d'être trop long. Je ne me souviens plus du message d'erreur exact, désolé. Je ne trouve pas de documentation sur l'exacte des limites. Il est important pour moi de savoir parce que le plus insère je peut mettre le feu à un moment, le plus rapide de l'ensemble du processus. Tous les conseils /liens /documents serait grandement apprécié, merci!

Vos limites sont .NET taille de la chaîne (qui est int.MaxValue.. vous serez à court de mémoire avant de frapper) et la valeur maximale admissible de taille de requête de SQL...quelle qu'elle soit.
Je pensais, comme beaucoup, mais de trouver le réel max taille de requête est là que je vais avoir de la difficulté à
Je crois qu'il est de 64 ko * la taille des paquets. Cependant au lieu de 20 000 instructions insert, avez-vous envisagé (a) décomposer en petits lots (b) en utilisant les VALEURS de() à la décomposer en, disons, 20 états d'INSERTION? (c) à l'aide de SSIS ou un autre outil qui est beaucoup mieux à la génération des opérations en bloc de 20 000 INSERT sera jamais?
Aussi, pourquoi avez-vous besoin de "recall", le message d'erreur exact? Tu ne peux pas reproduire le problème, puis copier et coller le message d'erreur, sans avoir à appeler votre propre mémoire? Non pas que vous devriez jamais envoyer 4 millions d'instructions INSERT dans n'importe quel scénario, indépendamment des problèmes avec les longueurs de chaîne dans la langue de l'application.
Le découper en petits lots a été le problème d'origine. Les insertions qui peut être fait dans un ExecuteNonQuery le plus rapide de la migration. Je peux reproduire le problème, mais il faudrait au moins 15 heures. C'est une longue histoire. L'obtention de données de SuperBase nécessite l'utilisation de leur pilote ODBC qui est très lent. Nous parlons comme 5 minutes pour rassembler 1000 enregistrements en fonction de la requête. Je ne sais pas comment je voudrais utiliser SSIS ou n'importe quel outil depuis cette DB est de 20 ans et n'est pas supporté par quoi que ce soit mais je vais chercher plus loin

OriginalL'auteur DontFretBrett | 2014-01-27