2017-04-20 13 views
0

問題の原因を突き止めるのに役立つ必要があります。テーブルへの挿入に失敗しました

create table ##temp 
( 
    city Varchar(100), 
    country Varchar(100), 
    region Varchar(30), 
    load_date datetime 
); 

insert into ##temp 
    select 
     a.city, 
     a.country, 
     '' as region, 
     a.load_date 
    from 
     table_1 a 

エラー:

Conversion failed when converting date and/or time from character string.

ロードの日付例:

2017-04-17 00:00:00.000 
2017-04-17 00:00:00.000 
2017-04-17 00:00:00.000 
2017-04-17 00:00:00.000 
2017-04-17 00:00:00.000 
+1

を使用することができますか?それに応じてタグを追加してください。 – Alfabravo

+0

いくつかのデータの例はありますか? – AlwaysData

+0

あなたはselect intoではなく、単純なinsert文を使ってテーブルに1行挿入できますか?次に、insert文をここに提供して、誰かがなぜ挿入が失敗したのかを知ることができます。 – AlwaysData

答えて

0

SQL Server Management Studioで完全なスクリプトを実行しましたが、単一のエラーを出すことなく実行されます。しかし、日付列で、あなたはどのようなDBMSを使用しているCASTCONVERT

完全なSQLスクリプト

CREATE TABLE table_1 (
    city varchar(100), 
    country varchar(100), 
    region varchar(30), 
    load_date datetime 
) 

INSERT INTO table_1 
    VALUES ('Mumbai', 'India', 'West', GETDATE()) 

SELECT 
    * 
FROM table_1 

CREATE TABLE #temp (
    city varchar(100), 
    country varchar(100), 
    region varchar(30), 
    load_date datetime 
); 

INSERT INTO #temp 
    SELECT 
    a.city, 
    a.country, 
    a.region, 
    a.load_date 
    FROM table_1 a 

SELECT 
    * 
FROM #temp 
--select * from table_1 
DROP TABLE #temp 
0

は、SQL Serverでサポートされている多くの形式があります - MSDN Books Online on CAST and CONVERTを参照してください。これらのフォーマットのほとんどはに従っていますが、設定によってはになります。したがって、これらの設定は何度か動作することがあります。

これを解決する方法は、SQL Serverでサポートされている(やや適応)ISO-8601の日付形式を使用することです - この形式は常にに動作します - に関係なく、SQL Serverの言語とDATEFORMATの設定。

ISO-8601 formatは、SQL Serverがサポートされては、2つの種類があります:

  • YYYYMMDDちょうど日付(時間がない部分)のために、ここに注意してください:ダッシュはありません!、これは非常に重要です! YYYY-MM-DDで、はSQL Serverの日付形式設定とは独立しており、はありませんはすべての状況で機能します!

か:日付と時刻の

  • YYYY-MM-DDTHH:MM:SS - ここで注意:このフォーマットダッシュを持っている(しかし、彼らは省略することができる)、および日付と時刻の間の区切り文字として固定TDATETIMEの部分です

これはSQL Server 2000以降で有効です。

は、SQL Server 以降とDATEデータ型を使用する場合(のみDATE - !ないDATETIME)、その後、あなたが実際にもYYYY-MM-DD形式を使用することができますし、それはあなたのいずれかの設定で、あまりにも、動作しますSQLサーバー。

なぜこの全体の話題がとてもトリッキーで、やや混乱しているのか聞かないでください。しかし、YYYYMMDD形式では、SQL Serverの任意のバージョン、およびSQL Serverの言語と日付形式の設定に問題はありません。あなたは、日付と時刻の両方を必要とするとき

SQL Serverの以降のための勧告では、日付部分のみが必要な場合DATEを使用することであり、DATETIME2(n)。あなたは、だからあなたの場合には、私はあなたが一時テーブルにload_dateのデータ型を変更

    • 場合、すべてが 正常に動作しますかなり確信している

      これまで、可能な場合DATETIMEデータ型を段階的に廃止を開始しようとする必要がありますdatetime2(3)

    • にOR:あなたがdatetime2017-04-17T00:00:00.000から
    にインポートしている文字列の書式を変更します
  • 関連する問題