Comment copyr des données d'une table à une autre où les types de données de colonne sont différents?

J'ai deux tables.

  1. NEW [contient des données] [toutes les colonnes sont varchar]

  2. NEW2 [table vide] [les colonnes ont des types de données différents]

Je veux copyr toutes datatables de New à New2.

Ce que j'ai fait,

SELECT T.* INTO #tmp FROM (SELECT * FROM [dbo].[new]) AS T 

puis

 INSERT INTO New2(col1, col2....) SELECT * FROM #TMP 

Mais ça ne marche pas.

 Msg 242, Level 16, State 3, Line 2 The conversion of a varchar data type to a smalldatetime data type resulted in an out-of-range value. The statement has been terminated. 

[Ce que je veux, c'est changer les types de données de colonne de NEW table, en particulier le varchar à smalldatetime. J'ai donc essayé de cette façon. Toute autre approche est également la bienvenue.]

Toute aide serait grandement appréciée.

Je vous remercie.

Oui. Terminé.

Ce que j'ai fait est, Importer des données Excle dans la table SQL Server avec toutes les colonnes d'une table en tant que type de données varchar. Le problème était dans datatables Excel, les valeurs de date, quelque part était NA. J'ai donc dû replace toutes ces valeurs NA par null.

Pour vérifier ces valeurs de date non valides dans une table, j'ai utilisé la command suivante.

 SELECT ISDATE(COL_NAME) AS Result SELECT ISNULL(COL_NAME) AS Result 

Pour cela, vous devez également vérifier et définir le format de date de SQL Server à l'aide des commands suivantes,

 DBCC useroptions SET DATEFORMAT mdy 

Ensuite, toutes les valeurs de résultat je les ai remplacés par NULL comme

 UPDATE TABLE SET COLUMN = NULL WHERE ISDATE(COLUMN) = 0 OR COLUMN = 'NA' 

Enfin, j'ai mis à jour les colonnes obligatoires manuellement en utilisant des commands simples comme,

 ALTER TABLE ALTER COLUMN COL_NAME <<data type>> 

J'ai également changé mon dateforamat à dmy qui avant était mdy.

Merci pour Suraj Singh, Deepshikha pour leurs suggestions utiles.

En insérant votre colonne dans smalldatetime

 SET DATEFORMAT ymd INSERT INTO New2(col1, col2....) SELECT Col1,Col2 , CAST('2007-05-08 12:35:29' AS smalldatetime) As Col_Name,...Col3 FROM #TMP 

Essayez comme:

 DECLARE @NEW TABLE([date] VARCHAR(20)); INSERT @NEW SELECT '2/8/2013 15:00' ; select LEFT([date],2) + SUBSTRING([date],3,2) + SUBSTRING([date],5,4) + ' '+ RIGHT([date],5)+':00' from @NEW UPDATE @NEW SET [date] = CONVERT(CHAR(16), CONVERT(SMALLDATETIME, LEFT([date],2) + SUBSTRING([date],3,2) + SUBSTRING([date],5,4) + ' '+ RIGHT([date],5)+':00', 120)); SELECT [date], CONVERT(SMALLDATETIME, [date]) FROM @NEW; 

Essaye ça

 SET DATEFORMAT ymd INSERT INTO destination_table(column_name) SELECT Column_name As Aliace_name FROM Source_table