# Microsoft SQL Server/Importer et exporter

* Introduction
* Bases de données
* Gestion des utilisateurs
* Variables
* Tables
* Procédures stockées
* Fonctions
* Bases de données spatiales
* Performances
* Importer et exporter
* SugarCRM

## Annexes

* Mots réservés
* Problèmes connus
* Introduction
* Bases de données
* Gestion des utilisateurs
* Variables
* Tables
* Procédures stockées
* Fonctions
* Bases de données spatiales
* Performances
* Importer et exporter
* SugarCRM

## Annexes

* Mots réservés
* Problèmes connus
[ Modifier le sommaire ]

## Interfaces graphiques
### Importer

Dans SSMS, l'option d'importation de fichier Excel ou Access dans MSSQL est disponible par un clic droit sur la base de destination, Tâches..., Importer des données....

### Exporter

De même, il existe Tâches..., Exporter des données... ou Copier la base de données.
Il est par ailleurs possible d'exporter le résultat d'une requête. En effet, par défaut dans SSMS, le bouton Résultats dans des grilles est enfoncé. En cliquant sur Résultats dans un fichier, il devient possible d'exporter le contenu de tables dans un fichier .rpt avec une requête SQL.
Pour transformer une base MS-SQL en MySQL il existe MySQL Workbench. Attention car la syntaxe des procédures stockées est différente.

## xp_cmdShell

xp_cmdShell permet de d’interagir avec le système de fichier, en manipulant le shell du système d'exploitation : il comprend donc les commandes DOS.

### Créer un fichier texte

Pour le lire, il suffit de le charger dans une table avec BULK INSERT.

### Créer un dossier

L'antislash de fin est facultatif :

### Supprimer un dossier
## OPENROWSET

Pour archiver vers d'autres formats que ceux de la base de données, il existe la fonction OPENROWSET. Elle permet d'importer ou d'exporter des données aux formats MS-Access ou MS-Excel.
Si ce pilote XLS demande une activation, il faut configurer :
Soient les fichiers C:\Test_OPENROWSET.csv, C:\Test_OPENROWSET.xls et C:\Test_OPENROWSET.xlsx existants, avec une feuille nommée "Feuil1", dont les en-têtes de colonnes sont "Nom" et "Prénom".

### Insertions dans un tableur

Si le fichier XLS(X) a des en-têtes de colonnes, il faut les nommer au lieu d'employer *.

### Sélections dans un tableur
#### CSV

On définit le dossier puis le fichier. Il y a deux pilotes au choix :
ou

#### XLS

Pour lire un XLS ou ou l'importer dans une table, on définit le fichier puis la feuille :
Plusieurs options peuvent aussi être placées après le nom du fichier. Elles n'impactent pas le mode écriture, seulement le mode lecture.
* "HDR" (comme header) : les en-têtes de colonnes sont sur la première ligne (comportement par défaut) "HDR=YES". Si "HDR=NO", les colonnes sélectionnées s'appellent alors "F1", "F2", "F3"...
* "IMEX" (pour ImportMixedTypes) :
** "=0" : Export mode, Excel devine les types des champs.
** "=1" : Import mode, les champs sont tous convertis en texte.
** "=2" : Linked mode.
* Types des données :
** "DT_BOOL" : booléen.
** "DT_CY" : devise.
** "DT_DATE" : date et heure.
** "DT_NTEXT" : texte.
** "DT_R8" : numérique.
** "DT_WSTR" : chaîne de caractères.
On peut aussi créer un serveur lié pour l'occasion :

#### XLSX

Pour un XLSX c'est un autre pilote :
S'il faut enregistrer le pilote, l'installer depuis : https://www.microsoft.com/fr-FR/download/details.aspx?id=23734.

### Modification d'un tableur

La fonction OPENROWSET de SQL Server 2008 ne permet pas de modifier les propriétés des cellules d'un tableur, pour se faire se reporter au paragraphe sur sp_OACreate. Dans tous les cas, il peut tout à fait mettre à jour ses valeurs comme si elles étaient dans des tables :

## BCP

bcp (pour Bulk Copy) est un utilitaire d'importation et exportation de données avec des fichiers plats uniquement (XML ou CSV).

## sp_OACreate

master.dbo.sp_OAMethod est une procédure stockée étendue permettant de manipuler des fichiers et des dossiers. Elle n'est pas activée par défaut sous SQL Server 2008, il faut donc le faire ainsi :
Voici un exemple de création puis de modification de fichier XLS (les numéros des couleurs sont les mêmes qu'en VBA) :

## Sauvegardes .bak et .trn

Tout d'abord, il faut distinguer l'archivage des bases (copie d'un .mdf en .bak) de celui des logs (.ldf en .trn) appelés aussi journaux de transaction.

### Backup des bases

Il est recommandé d'effectuer automatiquement celui un backup des bases toutes les nuits, à l'aide d'un job (dans SSMS, en bas de l'arborescence, menu Travaux). Un deuxième pourra s'occuper de supprimer les .bak après une certaine durée de rétention qui peut dépendre de l'espace disponible sur le serveur.
Exemple de sauvegarde sur un disque dur du serveur (et non pas un du client où SSMS est lancé) :

### Journaux
#### Requêtes

Par défaut, SSMS ne permet pas de consulter les requêtes SQL envoyées au serveur.
Toutefois, les dernières requêtes sont stockées dans un fichier des traces .trc. Pour connaitre son nom :
Ensuite on peut en extraire les 10 dernières requêtes SQL envoyées au serveur :
Soit en une seule requête :
Autre solution, passer par les statistiques de performance :
La plupart des requêtes des traces sont différentes de celles des statistiques, plus exhaustive mais sans les backups.

#### Transactions

Il existe une fonction pour lire les journaux des transactions non archivées :
Afin de gagner de la place, ces logs doivent par contre être supprimés régulièrement (c'est sans incidence sur l'utilisation du système). Il existe trois façons de les tronquer :
* DBCC SHRINKFILE (N'MaBase_log' , 0, TRUNCATEONLY). DBCC est le sigle de DataBase Console Commands (commandes en console de base de données), c'est un ensemble de commandes sur les bases.
* Clic droit sur la base, tâches, réduire... Fichiers, Type de fichier : Journal.
* Clic droit sur la base, tâches, détacher... (la base disparait ensuite de la liste), déplacer le .ldf, puis clic droit sur le serveur, joindre... En sélectionnant le .mdf, un nouveau .ldf vierge sera automatiquement créé avec.
Pour le définir automatiquement, il faut créer un job : Agent SQL server, Travaux, Clic droit : Nouveau travail.

## Restaurations

Dans SSMS, pour restaurer une base de données, il faut faire un clic droit sur Bases de données, puis :
* Restaurer les fichiers : si le backup ne doit pas écraser la base originale.
* Restaurer la base de données... : pour remplacer une base (préalablement détachée) par sa sauvegarde. On doit ensuite choisir une base de données existante ou un fichier de backup (.bak) avec l'option "Périphérique".
Sinon en SQL ça donne :

## Références

* ↑ http://blog.sqlauthority.com/2015/06/24/sql-server-fix-export-error-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine/
* ↑ http://www.mysql.fr/products/workbench/
* ↑ http://www.thegeekstuff.com/2014/03/mssql-to-mysql-stored-procedure/
* ↑ https://msdn.microsoft.com/fr-fr/library/ms190312.aspx
* ↑ http://stackoverflow.com/questions/87735/how-do-you-transfer-or-export-sql-server-2005-data-to-excel
* ↑ http://www.excel-sql-server.com/excel-import-to-sql-server-using-distributed-queries.htm
* ↑ https://msdn.microsoft.com/fr-fr/library/ms141683.aspx
* ↑ https://msdn.microsoft.com/fr-fr/library/ms141036.aspx
* ↑ http://www.excel-sql-server.com/excel-import-to-sql-server-using-linked-servers.htm
* ↑ https://msdn.microsoft.com/fr-fr/library/ms162802(v=sql.100).aspx
* ↑ http://sqlindia.com/copy-move-files-folders-using-ole-automation-sql-server/
* ↑ https://msdn.microsoft.com/fr-fr/library/office/ff840443.aspx
* ↑ https://msdn.microsoft.com/fr-fr/library/ms186865%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396
* ↑ https://msdn.microsoft.com/fr-fr/library/ms188796(v=sql.120).aspx
* ↑ http://communitybi.blogspot.fr/2011/12/comment-creer-un-job-dans-sql-server.html
* ↑ https://msdn.microsoft.com/fr-fr/library/ms186858%28v=sql.100%29.aspx