sábado, 7 de marzo de 2015

Error "Failed to load Msxmlsql.dll" en SQL2008R2 Developer

Después de instalar el SQL SERVER 2008R2 64 bits en mi sistema operativo Windows 7 Professional 64 bits, tuve problemas para ejecutar el procedimiento almacenado "sp_xml_preparedocument" que permite analizar documentos XML. Intente las soluciones que aparecen en este post:
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/28f42f15-8ae3-4734-8694-7908fa331a3b/error-failed-to-load-msxmlsqldll-on-sql2008express-and-sql2008r2-developer?forum=sqlxml
pero solo las dos ultimas me sirvieron de referencia para la solución que finalmente me funcionó.
La solución fue copiar los archivos msxmlsql.dll y msxmlsql.rll desde mis archivos de instalación hacia el directorio:
C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLSERVER2008R2\MSSQL\Binn
Y con eso ya puedo procesar el contenido de archivos xml.
sql server
Posted by InfoTacticas Soluciones  |  1 comment

3/07/2015 09:59:00 p. m. Share:

viernes, 6 de marzo de 2015

Hacer que los reportes RDLC (Reportes para Report Viewer c#) se incrusten con la aplicación a la hora de publicar

Por mucho tiempo trabajé con los reportes de Reportviewer, indicando simplemente su ruta en el sistema de archivos, de modo que cuando tenia que publicar, copiaba yo misma todos los reportes en sus carpetas respectivas, porque estos no se incrustaban en la aplicación a la hora de publicar. La instrucción en código que usaba era la siguiente:
rvInformes.LocalReport.ReportPath = "Reportes/Informes/rptInformes_PagoMedicos.rdlc";
Hasta que buscando un poco más de información encontré el modo de hacer que dichos reportes sean embebidos como recursos de la aplicación, a continuación les muestro el modo en que lo trabajo.
    ReportParameter[] repParamHeader = new ReportParameter[1];                    
    repParamHeader[0] = new ReportParameter("RP_UsuarioLogueado", UsuarioLogeado.nombre, false);

    // LAS TRES LINEAS SIGUIENTES SON OBLIGATORIAS PARA QUE SE RECONOZCA COMO RECURSO EMBEBIDO
    rvInformes.ProcessingMode = ProcessingMode.Local;                    
    rvInformes.Reset();  
    rvInformes.LocalReport.ReportEmbeddedResource = "miempresa.aplicacion.Reportes.Informes.rptInformes_PagoMedicos.rdlc";
                                        
    rvInformes.LocalReport.DataSources.Clear();
    rvInformes.LocalReport.DataSources.Add(new ReportDataSource("dsInformes", miDataTablePagos));
    rvInformes.LocalReport.SetParameters(repParamHeader);
    rvInformes.LocalReport.Refresh();

miempresa.aplicacion.Reportes.Informes es el namespace en mi proyecto ASP.NET MVC. Es necesario que cada reporte RDLC esté configurado de la siguiente manera, tal como se ve en la siguiente imagen
En Acción de Compilación debe especificarse: Recurso incrustado
En Copiar en el directorio de resultados debe especificarse: Copiar siempre
visual studio
Posted by InfoTacticas Soluciones  |  No comments

3/06/2015 04:00:00 p. m. Share:

jueves, 18 de diciembre de 2014

Función Split en SQL Server - Function Split in SQL Server

T-SQL no cuenta con una función split, como si la encontramos en .NET, javascript u otros lenguajes. La solución no es nueva, hay algunos sitios donde podemos encontrar diferentes maneras de obtener la acción deseada, a continuación les comparto el modo como los trabajamos en InfoTácticas Soluciones.
--
--
create function  [dbo].[fni_Split]
(
 @Cadena nvarchar(max),
 @Delimitador nvarchar(5)
)  
RETURNS @TblRetorno table 
(
 Id int identity(1,1),
 Dato nvarchar(max)
) 
AS  
BEGIN 
 
 While (Charindex(@Delimitador,@Cadena)>0)
 Begin
  Insert Into @TblRetorno (Dato)
  Select 
   Dato = ltrim(rtrim(Substring(@Cadena,1,Charindex(@Delimitador,@Cadena)-1)))

  Set @Cadena = Substring(@Cadena,Charindex(@Delimitador,@Cadena)+1,len(@Cadena))
  
 End
 
 Insert Into @TblRetorno (Dato)
 Select Dato = ltrim(rtrim(@Cadena))

 Return
END

split sql server
Posted by InfoTacticas Soluciones  |  No comments

12/18/2014 09:42:00 a. m. Share:

miércoles, 17 de diciembre de 2014

Diferencia de años entre fechas SQL Server - Difference in years between dates in SQL Server

La siguiente función mostrada en SQL Server es una opción para calcular el intervalo de años entre dos fechas, la primera fecha es la fecha de inicio(menor) y la segunda fecha es la fecha final(mayor). En caso que se quiera sacar la diferencia de años de una fecha cualquier con la fecha actual, usar como segundo parámetro getdate() o simplemente null. Dentro de la funcion se valida que si la segunda fecha es nula, se asigna al parámetro la fecha actual.
--
--
Create FUNCTION [dbo].[fnr_ireCalcularIntervaloAnios](@FechaInicio datetime, @FechaFin datetime)
returns int

as
begin
 declare @anios int
 
 if @FechaFin is null
  set @FechaFin = getdate()
 
 set @anios = (((365* year(@FechaFin))-(365*(year(@FechaInicio))))+ (month(@FechaFin)-month(@FechaInicio))*30 
  +(day(@FechaFin) - day(@FechaInicio)))/365
 return @anios
end
GO
Para ejecutar la función podemos usar:
 --   
 --
 set dateformat dmy -- para poder trabajar con fechas en formato dia/mes/año
                      -- es valido solo para la ventana de consultas
 select dbo.[fnr_ireCalcularIntervaloAnios] ('10/12/2004', '17/12/2010')
 select dbo.[fnr_ireCalcularIntervaloAnios] ('24/04/2004', null)
sql server
Posted by InfoTacticas Soluciones  |  No comments

12/17/2014 03:54:00 p. m. Share:

jueves, 4 de diciembre de 2014

Formato de Fechas en SQL SERVER

Si su servidor SQL Server está en lenguaje inglés, el formato en que se guardan las fechas es MM/DD/YY.
Si los desarrolladores no tenemos en cuenta estos formatos de fecha, podemos ocasionar que se inserten fechas érroneas, por ejemplo si quiero consultar una fecha 05 de febrero del 2015, en formato español seria '05/02/2015', pero si nuestro servidor está en idioma inglés. a la hora de devolver los resultados, la fecha considerada sería 02 de Mayo del 2015.

Entonces, algunas de las opciones para evitar estos inconvenientes a la hora de trabajar con fechas en SQL Server es:

  • Utilizar el formato estándar de ISO para enviar los datos de fecha y hora a SQL Server, que es "YYYYMMDD HH:mm:ss" (sin separadores). Con el formato ISO es más "internacional" y es independiente del idioma predeterminado. Si yo empiezo a utilizar este formato para mis consultas no tendré problemas en ninguna de mis aplicaciones por mas que nuestro usuario este configurado en Ingles, Español o lo que fuere, ni tampoco si en un Windows tengo definido en su configuración regional cualquier cosa.

  • Por ejemplo:
    --
    --
    SELECT * FROM Paciente WHERE FechaNacimiento = '19820827'
    
  • Yo lo suelo hacer, si es que estoy consultando en la misma ventana para Queries del SQL Server, primero ejecuto: set dateformat dmy que me permite trabajar, en esa ventana de consultas, las fechas en formato dmy y también tendría que usar la función CONVERT para convertir el tipo de dato DATETIME a VARCHAR, pero antes es necesario decirle que lo convierta en un formato de DD/MM/YYYY, para eso se usa como tercer parametro de la funcion convert el valor: 103.
    Por ejemplo:
    --
    --
    SELECT * FROM Paciente WHERE convert(varchar(10), FechaNacimiento, 103) = '27/08/1982'
    
    Así, la fecha consultada sería reconocida como el 27 de agosto de 1982. En el caso que quiera consultar dentro de un procedimiento almacenado, lo realizaría utilizando, sería de la siguiente manera:
    create procedure sp_ObtenerPacientesSegunFechaNacimiento
    @FechaNacimientoConsulta datetime
    as
       SELECT IdPaciente, Nombres, Apellidos FROM Paciente 
       WHERE convert(varchar(10), FechaNacimiento, 103) = convert(varchar(10), @FechaNacimientoConsulta, 103)
    
sql server
Posted by InfoTacticas Soluciones  |  No comments

12/04/2014 01:22:00 p. m. Share:
back to top