J'utilise Import Wizard pour charger un fichier texte et j'ai besoin que les blancs dans les champs entiers soient nuls, mais seuls des zéros sont insérés.
Comment l'importer correctement?
Malheureusement, ce n'est pas possible si vous insistez pour utiliser l'Assistant, vous devrez modifier le package à l'aide de Visual Studio.
Il existe une option "garder les valeurs nulles" lors de la modification du package dans Visual Studio
Compte tenu de ce fichier .csv:
StringField,IntField
a,1
b,5
c,
d,6
e,
f,8
g,
h,
i,10
j,
et cette définition de table
CREATE TABLE [dbo].[NullTest](
[StringField] [varchar](50) NULL,
[IntField] [int] NULL
) ON [PRIMARY]
GO
Lorsque vous importez les données à l'aide de l'assistant, les valeurs nulles sont converties en 0
Cependant, si à la fin de l'assistant vous sélectionnez "enregistrer le package sous" au lieu de "exécuter immédiatement" comme dans cet écran
Le fichier peut être enregistré quelque part sur le système de fichiers.
Si vous créez ensuite un nouveau projet Integration Services, vous pouvez ajouter un package existant comme celui-ci
Si vous accédez au fichier que vous venez d'enregistrer et que vous le visualisez, vous verrez une tâche de flux de données (vous verrez également une tâche d'exécution SQL si vous avez choisi de créer la table au lieu de l'ajouter à une table existante)
Double-cliquez sur le flux de données pour le modifier et double-cliquez sur la source de données pour cocher l'option "conserver les valeurs nulles"
Double-cliquez ensuite sur la destination pour afficher les propriétés, puis définissez la propriété "Conserver les valeurs NULL" sur true.
Si vous cliquez ensuite sur la flèche verte dans la barre d'outils ou sélectionnez déboguer> démarrer le débogage dans le menu pour exécuter votre package, le résultat final est le suivant
Au final, l'assistant n'est qu'un assistant. Il génère un package SSIS pour vous et choisit certaines valeurs par défaut, malheureusement pas les valeurs par défaut que vous souhaitez.
Si vous souhaitez conserver les valeurs nulles, il n'y a pas vraiment d'autre moyen que de modifier le package avec Visual Studio.
Là encore, il peut être plus facile de simplement créer le package vous-même dans Visual Studio ou d'utiliser la solution T-SQL de @ MaxVernon.
SI vous avez au moins SSMS v 17.3 et que vous importez dans une nouvelle table, vous pouvez utiliser Assistant Importation de fichier plat vers SQL pour cela.
L'exécuter sur le fichier CSV dans la réponse de Tom.
Avec le tableau résultant ressemblant à
Je vois que vous essayez d'utiliser le Wizard pour importer des données. Vous feriez peut-être mieux de créer manuellement la table avec les définitions de colonne que vous désirez et d'utiliser le T-SQL BULK INSERT
commande pour importer les données.
USE tempdb;
CREATE TABLE dbo.TestSource
(
SomeNumber INT NULL
);
J'ai créé un exemple de fichier en texte brut nommé C:\temp\test.txt
qui contient les lignes suivantes:
1
3
4
6
7
9
Cette instruction importe les lignes du fichier texte dans la table TestSource
:
BULK INSERT dbo.TestSource
FROM 'C:\temp\test.txt'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
KEEPNULLS
);
Cela montre le contenu une fois l'importation terminée:
SELECT *
FROM dbo.TestSource;