none
Generar Script de esquema y datos, Formato de Fechas (SQL SERVER 2014) RRS feed

  • Pregunta

  • Hola, generando un script de exportación de Base de datos completa de SQL Server me genera distintos formatos de script para los campos datetime

    Con el manager de SQL2012 me genera algo del tipo:

    INSERT [dbo].[Tabla1] ([Campo1]) VALUES (CAST(0x0000921900000000 AS DateTime))

    Pero con el Manager de SQL2014 me cambia el formato de exportación

    INSERT [dbo].[Tabla1] ([Campo1]) VALUES (CAST(N'2002-05-27 00:00:00.000' AS DateTime))

    El problema es que dependiendo del lenguaje Servidor donde importe el script la segunda dará error.

    Con un SET DateFormat YMD funcionaria pero me gustaría que fuese automático.

    La pregunta es:

    ¿Hay alguna forma de configurar la herramienta de generación y publicación de scripts de sql server para use un formato que no dependa del idioma o incluya la instruccion de deteformat? tal y como lo hacia el sql 2012

    martes, 6 de junio de 2017 10:14

Respuestas

  • Hola.

    Salvo que otro forista opine lo contrario, no conozco una manera automática. Yo he resuelto situaciones similares con la instrucción que tu mencionas, editando el script y ubicándola al principio del script generado, tanto en SQL Server 2012 como en SQL Server 2014.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    martes, 6 de junio de 2017 15:49
  • la verdad es que la solución es sencilla depende del idioma del usuario con que ejecutes, cada vez que se genera un usuario se le establece un idioma por defecto. Si ese idioma es compatible con tu fecha, tu script funcionará en todos.

    Otra alternativa es añadir al principio del script ese set dateformat, que tampoco es que sea muy complicado. 

    Por otra parte, la segunda forma, no te dará error en ningún server porque es formato ANSI, (yyyy mm dd , no debería darte error. 


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA


    martes, 6 de junio de 2017 15:52
    Moderador

Todas las respuestas

  • Hola.

    Salvo que otro forista opine lo contrario, no conozco una manera automática. Yo he resuelto situaciones similares con la instrucción que tu mencionas, editando el script y ubicándola al principio del script generado, tanto en SQL Server 2012 como en SQL Server 2014.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    martes, 6 de junio de 2017 15:49
  • la verdad es que la solución es sencilla depende del idioma del usuario con que ejecutes, cada vez que se genera un usuario se le establece un idioma por defecto. Si ese idioma es compatible con tu fecha, tu script funcionará en todos.

    Otra alternativa es añadir al principio del script ese set dateformat, que tampoco es que sea muy complicado. 

    Por otra parte, la segunda forma, no te dará error en ningún server porque es formato ANSI, (yyyy mm dd , no debería darte error. 


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA


    martes, 6 de junio de 2017 15:52
    Moderador
  • Hola.

    Yo uso SQL Server 2014 y me pasa lo mismo. Finalmente creé una pequeña aplicación que me tomara el archivo, buscara las fechas y modificara su formato.  Es simple, pero a mi me ahorra montones de tiempo de revisión. Se las dejo. Si la mejorna me avisan  :D

    classProgram     {         staticvoid Main(string[] args)         {             string Carpeta = @"D:\Scripts\QA\";             string NombreArchivo = "NombreArchivoSriptsSinExtencion";             using (StreamWriter fileWrite = newStreamWriter(Carpeta + NombreArchivo + @"-FC.sql"))             {                 using (StreamReader fielRead = newStreamReader(Carpeta + NombreArchivo + @".sql"))                 {                     String line;                     while ((line = fielRead.ReadLine()) != null)                     {                         string texto = line;                         string nuevafecha = "";                         string pattern = @"\bN'\d{4}-\d{2}-\d{2}\b";                         Regex rgx = newRegex(pattern);                         Console.WriteLine($"{texto}\n\n\n");                         foreach (Match match in rgx.Matches(texto))                         {                             var pfechas = match.Value.Substring(2).Split('-');                             nuevafecha = pfechas[0] + pfechas[1] + pfechas[2];                             Console.WriteLine($"Encontrada '{match.Value}' en la posición {match.Index}, convertida a {nuevafecha}");                             texto = texto.Replace(match.Value, "N'" + nuevafecha);                             Console.WriteLine($"{texto}\n\n\n");                         }                         fileWrite.WriteLine(texto);                     }                 }             }                          Console.WriteLine("Presiones <ENTER> para continuar ...");             Console.ReadLine();         }     }

    Que les aproveche..

         


    FASIMUS


    • Editado FASimus lunes, 28 de mayo de 2018 14:53
    lunes, 28 de mayo de 2018 14:52