sql server tutorial Comment puis-je convertir la chaîne "NULL" dans un fichier plat à DATETIME ou DATETIME2?



ssis video (1)

Vous devez insérer les colonnes dans votre source de fichier plat en tant que chaînes (par exemple, [DT_STR]), puis les convertir en utilisant une transformation de colonne dérivée avec les expressions suivantes:

Expression pour DT:

DT == "NULL" ? NULL(DT_DBTIMESTAMP) : (DT_DBTIMESTAMP) DT

Expression pour DT2:

DT2 == "NULL" ? NULL(DT_DBTIMESTAMP2, 7) : (DT_DBTIMESTAMP2, 7) DT2

tl; dr : Comment convertir "NULL" dans un fichier plat en NULL dans SSDT / SSIS?

Dans SSMS, exécutez ce code:

/* Run once
SET NOCOUNT ON
CREATE TABLE #source (DT DATETIME, DT2 DATETIME2)
CREATE TABLE #target (DT DATETIME, DT2 DATETIME2)
INSERT INTO #source
VALUES (GETDATE(),GETDATE()),(NULL,NULL),(GETDATE(),'9999-12-31 23:59:59')
*/
-- Cntl-Shift-F, results to CSV with headers
SELECT * FROM #source  

-- Cntl-D, results to grid
INSERT INTO #target
SELECT * FROM #source
SELECT * FROM #target

-- Prep for next run
TRUNCATE TABLE #target

Configurez SSMS pour créer des résultats à classer au format CSV avec en-têtes: Outils -> Options -> Résultats de la requête -> SQL Server -> Résultats au texte: pulldown pulldown, cochez Inclure les en-têtes de colonne dans le jeu de résultats.

Votre sortie sera similaire à:

DT,DT2
2017-11-16 10:09:31.997,2017-11-16 10:09:31.9970000
NULL,NULL
2017-11-16 10:09:31.997,9999-12-31 23:59:59.0000000

Dans SSDT, configurez une connexion de fichier à plat, onglet "Avancé", définissez les types de colonnes à DT_DBTIMESTAMP pour DT, DT_DBTIMESTAMP2 pour DT2.

(Question secondaire: toute idée que SSDT se trompe invariablement, et définit les deux colonnes à DT_DATE? Clairement les colonnes ont un composant de temps.)

Dans la source du fichier plat, configurez RetainNulls = True (bien que je pense que ce n'est pas pertinent car je n'ai pas de valeurs nulles vraies, c'est-à-dire une colonne vide ne contenant aucune donnée.

Comment obtenir SSDT pour créer les mêmes résultats dans #target que je reçois dans SSMS? IOW, j'ai besoin de convertir le texte "NULL" en un "correct" NULL dans la cible.

Mes préférences:

  1. tromperie de configuration dans la connexion de fichier plat et / ou la source de fichier plat,
  2. colonne dérivée (j'ai besoin d'aide pour la dérivation),
  3. composant de script.




flatfilesource