J'ai deux tables.
NEW [contient des données] [toutes les colonnes sont varchar]
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