none
errore conversione da NVARCHAR a DATETIME

    Domanda

  • Buongiorno a tutti,
    ho una tabella fatta così:

    CREATE TABLE [dbo].[CALENDARIACR](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[IDRISORSAOSL] [int] NOT NULL,
    	[IDCALENDARIT] [int] NOT NULL,
    	[DataModifica] [datetime] NULL,
    	[DataCreazione] [datetime] NULL CONSTRAINT [DF_CALENDARIACR_DataCreazione]  DEFAULT (getdate()),
     CONSTRAINT [CALENDARIACR01] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    Con il generatore di script di SSMS creo l'istruzione di insert per portare i dati di questa tabella da un db ad un altro (che ha ovviamente la stessa identica tabella).

    L'istruzione:

    INSERT [dbo].[CALENDARIACR] ( [IDRISORSAOSL], [IDCALENDARIT], [DataModifica], [DataCreazione]) VALUES (120, 3, NULL, CAST(N'2017-11-16 18:45:43.470' AS DateTime))

    mi genera l'errore seguente:

    Messaggio 242, livello 16, stato 3, riga 1
    La conversione di un tipo di dati nvarchar in datetime ha generato un valore non compreso nell'intervallo dei valori consentiti.
    L'istruzione è stata interrotta.

    Non riesco a spiegarmi questo errore anche perché ho effettuato già più volte la stessa operazione senza problemi.

    Qualcuno sa dirmi come risolvere?

    Grazie 1000.

    Beppe

    giovedì 7 dicembre 2017 08:42

Risposte

  • Ciao,

    Il formato del datetime dipende dalla lingua con cui è stato configurato il database. Per trovarlo, puoi lanciare questa query:

    select @@language


    Per impostarlo invece, ti invito a guardare qui.

    Gabriele


    • Modificato Gabriele Etta giovedì 7 dicembre 2017 09:44
    • Contrassegnato come risposta Beppe1964 giovedì 7 dicembre 2017 10:08
    giovedì 7 dicembre 2017 09:44

Tutte le risposte

  • Ciao,

    Ho eseguito quanto hai scritto e funziona. Prova ad inserire quel record utilizzando un formato diverso per le date, ossia:

    NSERT [dbo].[CALENDARIACR] ( [IDRISORSAOSL], [IDCALENDARIT], [DataModifica], [DataCreazione]) VALUES (120, 3, NULL, CAST(N'11-16-2017 18:45:43.470' AS DateTime))

    Il problema può essere dato dal formato di rappresentazione delle date che non rispecchia quello del tuo database.

    A presto,

    Gabriele


    giovedì 7 dicembre 2017 09:02
  • Ciao,

    Ho eseguito quanto hai scritto e funziona. Prova ad inserire quel record utilizzando un formato diverso per le date, ossia:

    NSERT [dbo].[CALENDARIACR] ( [IDRISORSAOSL], [IDCALENDARIT], [DataModifica], [DataCreazione]) VALUES (120, 3, NULL, CAST(N'11-16-2017 18:45:43.470' AS DateTime))

    Il problema può essere dato dal formato di rappresentazione delle date che non rispecchia quello del tuo database.

    A presto,

    Gabriele


    Ciao Gabriele,
    e grazie per la risposta.

    Mettendo la data nel formato che indichi tu funziona ma il mio problema è che lo script me lo genera SSMS... devo verificare se nelle opzioni di generazione dello script mi permette di impostare il formato dei datetime. 

    Mi sono accorto ora di avere omesso una informazione importante: il db di arrivo si trova su un altro server sql, quindi evidentemente si tratta di qualche impostazione dei datetime differente fra i 2 server... ora provo ad approfondire questo aspetto.

    Grazie ancora.

    Beppe

    giovedì 7 dicembre 2017 09:17
  • Purtroppo nelle opzioni di esportazione non trovo nulla che mi permetta di impostare il formato dei datetime.

    Qualcuno sa se è possibile farlo in qualche modo?

    Grazie 1000.

    Beppe

    giovedì 7 dicembre 2017 09:35
  • Ciao,

    Il formato del datetime dipende dalla lingua con cui è stato configurato il database. Per trovarlo, puoi lanciare questa query:

    select @@language


    Per impostarlo invece, ti invito a guardare qui.

    Gabriele


    • Modificato Gabriele Etta giovedì 7 dicembre 2017 09:44
    • Contrassegnato come risposta Beppe1964 giovedì 7 dicembre 2017 10:08
    giovedì 7 dicembre 2017 09:44
  • Ciao,

    Il formato del datetime dipende dalla lingua con cui è stato configurato il database. Per trovarlo, puoi lanciare questa query:

    select @@language


    Per impostarlo invece, ti invito a guardare qui.

    Gabriele


    Grazie Gabriele!

    Con le tue indicazioni ho risolto.

    Il server di partenza ha il language = us_english mentre quello di arrivo è Italiano; nello script che mi genera SSMS basta mettere all'inizio SET LANGUAGE us_english e l'importazione dei datetime funziona.

    Grazie ancora e buona giornata.

    Beppe

    giovedì 7 dicembre 2017 10:07
  • Ti consiglio di utilizzare, per le date, il formato ANSI senza delimitatori.

    In questo modo non dovrai preoccuparti del linguaggio del database.

    Nel tuo esempio, al posto di:

    CAST(N'11-16-2017 18:45:43.470' AS DateTime)

    puoi, più semplicemente, scrivere:

    '20171116 18:45:43.470'

    ovvero, se non ti serve l'orario:

    '20171116'

    giovedì 7 dicembre 2017 16:51
  • Ti consiglio di utilizzare, per le date, il formato ANSI senza delimitatori.

    In questo modo non dovrai preoccuparti del linguaggio del database.

    Nel tuo esempio, al posto di:

    CAST(N'11-16-2017 18:45:43.470' AS DateTime)

    puoi, più semplicemente, scrivere:

    '20171116 18:45:43.470'

    ovvero, se non ti serve l'orario:

    '20171116'

    Ciao Paperoga,

    in effetti uso sempre il formato ANSI ma in questo caso lo script lo prepara SSMS che non usa il formato ANSI.

    Buona serata.

    Beppe

    giovedì 7 dicembre 2017 18:37