Suggestion pour l'importation de données en masse

8

Nous travaillons sur un projet qui nécessite d'importer quotidiennement des données à partir d'une feuille de calcul Excel. Les données seront importées à partir d'un modèle prédéfini et ce que nous pensons, nous allons d'abord télécharger les données dans une table temporaire et effectuer une opération de nettoyage (supprimer les informations inutiles, ajouter de nouvelles lignes dans la table parent et obtenir leur FK, etc.).

  • J'ai besoin de savoir s'il existe un outil ou un utilitaire qui peut réduire nos efforts.
  • Quelle est la meilleure façon d'insérer un enregistrement en bloc à partir de différentes sources (principalement à partir de feuilles de calcul Excel)?
kodvavi
la source
L'application que nous allons créer est une application Web où l'utilisateur a un contrôle limité sur le serveur SQL. L'utilisateur téléchargera le fichier via le navigateur et le reste de l'opération se fera côté serveur.
kodvavi

Réponses:

9

SSIS est la voie à suivre. Si vous n'avez jamais créé de package auparavant et que vous savez que vos fichiers source (lire aussi: feuilles de calcul) seront toujours les mêmes, vous pouvez utiliser l'assistant d'importation / exportation de SQL Server. Dans la base de données SSMS, cliquez avec le bouton droit de la souris et sélectionnez Tâches> Importer (ou exporter) des données ...

Cela ouvre un assistant qui vous guide à travers les étapes de sélection de vos fichiers source / destination ainsi que des tables de destination (peut créer des tables si elles n'existent pas déjà). Vous devrez mapper les colonnes où aller, mais l'assistant est assez simple. Lorsque vous avez terminé, il vous demandera d'exécuter ou d'enregistrer le package (ou de faire les deux). Enregistrez le package. Cela enregistrera votre package au format .dtsx si vous choisissez de l'enregistrer dans le système de fichiers. Votre autre option consiste à enregistrer le package dans SQL Server lui-même, qui les conserverait ensuite dans la base de données système msdb.

Une fois que vous avez enregistré votre package, vous pouvez créer un travail SQL Agent pour exécuter ce package périodiquement (vous spécifiez la planification) afin de pouvoir toujours charger vos tables à l'aide de SSIS. Si vous souhaitez en savoir plus sur SSIS, consultez les webinaires gratuits de mon entreprise (nous couvrons toute la pile BI) sur PragmaticWorks

SQLChicken
la source
En fait, nous créons une application Web afin de ne pas permettre à l'utilisateur d'accéder directement à l'interface de la base de données. Notre application importe d'abord le fichier, puis nous faisons le reste de l'opération via notre application.
kodvavi
1
@kodvavi; vous pouvez appeler des packages SSIS via le code .net ...
gbn
1
@kodvavi, je ne sais pas ce que vous entendez par cette déclaration. Les applications Web n'ont généralement pas la tâche de lancer un chargement de données de toute façon, alors pourquoi est-ce important? La partie ETL de la base de données et l'interface de l'application Web sont deux choses différentes.
SQLChicken
Je sais que beaucoup de gens lancent des packages SSIS à partir du Web, mais pour moi, cela semble être une mauvaise idée, étant donné les problèmes avec les sources Excel.
Nick.McDermaid
5

Voici un exemple sur la façon d'importer des données d'Excel vers SQL Server. L'un des principaux problèmes consiste à s'assurer que vous utilisez le composant de conversion de données entre Excel et SQL Server et effectuez une conversion de NVARCHAR à VARCHAR car Excel traite les données comme NVARCHAR.

http://www.mssqltips.com/tip.asp?tip=1393

Sankar Reddy
la source
nvarchar est très bien avec nous car notre base de données va prendre en charge les attributs multilingues. J'examine les topis. Thanx
kodvavi
0

Je ne m'en débarrasserais de rien mr. gbn,Sankar Reddy,SQLChicken. Mais je voudrais dire qu'il existe un moyen simple d'importer une feuille Excel dans SQL via TSQL 'OPENROWSET'.

Par exemple, pour importer une userfeuille Excel dans la TestDBbase de données. Supposons que j'ai déjà créé la [user]table dans TestDBDatabase. Ensuite, le simple openrowset TSQL serait mentionné ci-dessous comme ça

Use TestDB;
    Go
    select * INTO [User]
    from openrowset('MICROSOFT.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\TestFolder\User.xlsx; HDR=yes; IMEX=1',
    'select * from [User$]');
    Go

Remarque: j'écris ce TSQL dans l'environnement SQL Server 2012. Pour chaque OLEDBfournisseur openrowset de serveur SQL sera différent. Veuillez vérifier le OLEDBserveur de liaison -> fournisseur pris en charge pour cette version de SQL Server. Dans mon cas, ça l'est ACE.OLEDB.12.0. Avant l'importation, assurez-vous que cette Allow inprocesscase est cochée ou non par ce MICROSOFT.ACE.OLEDB.12.0fournisseur. Il faut vérifier comme ça entrez la description de l'image ici

Remarque: - Il est testé dans un environnement de production. Mais dans votre cas sans tester en environnement de test. Ne pas exécuter directement dans l'environnement de production.

Md Haidar Ali Khan
la source