J'exécute la déclaration
insert into [dbo].[Table_1]
values ('43546354354', '35435454351', 'vvish', GETDATE(), 'vvish', GETDATE())
Il y a un total de 154155 lignes.J'ai essayé et je vais l'erreur suivante.
Le script dépasse le paramètre de taille de script maximale de Transact-SQL IntelliSense. Vous pouvez modifier le paramètre sur la page Editeur de texte / Transact-SQL / IntelliSense dans le menu Outils / Options.
Je suis également allé dans Tools => Options => TextEditor => Transact-sql => Intellisense et augmentez la "Taille maximale du script à 5 Mo".
J'ai essayé de déplacer les lignes de chacun 50 000 scripts différents, mais cela prend beaucoup de temps pour moi de se déplacer et d'exécuter. J'ai beaucoup d'autres scripts de même taille. Toutes les suggestions, veuillez m'aider.
5 Réponses :
Avec plusieurs connexions. Point final. Sérieusement, c'est déjà une limitation de SQL Server (une connexion ne peut fonctionner qu'UNE seule chose à la fois - MARS est bien, mais vous ne pouvez toujours envoyer et exécuter qu'une seule instruction par ligne).
Alors, exécutez un pool de lignes, demandez à X threads d'ouvrir une connexion chacun et d'envoyer une ligne sur une ligne sur une ligne.
Vous pouvez également diviser les fichiers et les exécuter en parallèle - même concept, sauf pas sur une ligne par niveau de ligne.
Ou tout simplement devenir réel et utiliser un code qui les analyse et utilise SqlGBulkLoad. Les instructions elles-mêmes n'auraient JAMAIS dû être écrites comme ça, il existe des moyens plus efficaces pour charger des données en bloc que pour gérer des instructions SQL.
Vous pourrez peut-être améliorer les performances en ajoutant plusieurs tuples à une seule instruction INSERT ... VALUES :
insert into [dbo].[Table_1]
values ('43546354354', '35435454351', 'vvish', GETDATE(), 'vvish', GETDATE()),
('43546354355', '35435454352', 'vvisx', GETDATE(), 'vvisx', GETDATE())
Mais vous rencontrerez toujours le fichier maximum taille limite même si elle comporte moins de déclarations.
Cela dépend de certains facteurs supplémentaires. Si votre table n'a pas de déclencheurs, d'index, etc., vous pouvez effectuer ce chargement en utilisant la commande "sqlcmd". Générez simplement votre script et placez-le dans un fichier. Ensuite, vous pouvez exécuter le script suivant dans Windows NT Shell:
sqlcmd -S MyServer -d MyDatabase -E -I -i MyScript.sql
Cependant, comme TomTom l'a suggéré, il existe des moyens plus beaux / plus rapides pour effectuer un chargement direct à partir d'un fichier plutôt que de générer un script. P >
Vous pouvez créer une procédure stockée pour gérer l'insertion et faire en sorte que cette procédure stockée prenne un type de table défini par l'utilisateur comme paramètre, cela vous permettra de transmettre vos données sous forme de table à la procédure stockée et la procédure stockée peut s'exécuter aussi longtemps que nécessaire. Je suppose que vous prenez des données à partir d'une sorte de fichier et que vous développez ces commandes sql, donc je suggère d'utiliser C # avec dapper pour passer create et passer le datatable à la procédure stockée.
L'erreur que vous indiquez est liée à IntelliSense, pas à votre requête.
IntelliSense dit: "Hé, ce truc est énorme. Je ne vais même pas essayer."
Je suppose que vous avez utilisé Redgate ou un outil similaire pour générer votre script de mise à jour, vous avez trouvé qu'il était trop volumineux, puis vous l'avez divisé en morceaux.
Ce que vous devez faire est de vous assurer que vous avez
UTILISER [YourDataBaseName] ALLER
en haut de chaque requête.
Ensuite, lorsque vous exécutez, vous devriez afficher vos résultats.
Il semble que vous ayez obtenu le script d'insertion généré à partir d'une autre base de données et que vous essayez d'insérer des données dans votre base de données actuelle. Donc, ma suggestion serait, si possible, d'essayer d'insérer les données en utilisant "Exporter l'assistant d'importation" plutôt que de générer un script d'insertion.
Merci. Je n'ai pas généré de script d'insertion à partir d'une autre base de données. Mais j'ai généré à partir d'une feuille de calcul Excel. Maintenant, je vais récupérer des données dans une table à l'aide de SSIS à partir d'une feuille Excel. Merci pour la suggestion.