Mostrando entradas con la etiqueta SQL Server. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL Server. Mostrar todas las entradas

domingo, 26 de marzo de 2023

This SqlTransaction has completed; it is no longer usable

¿Qué tal?, les cuento que al realizar transacciones con SqlCommand, me surgía el siguiente error: This SqlTransaction has completed; it is no longer usable, mi tarea hacia inserción en tres tablas, una cabecera y dos de detalle, pero en la segunda inserción aparecía el error.

Si bien, la transacción se realizaba, pues note que los inserts si se realizaban en las tres tablas, la rutina marcaba una excepción y eso no me gustaba, por lo que decidí investigar y hacer pruebas para encontrar que lo provocaba, la respuesta fue que después de hacer un commit o un rollback en la transacción, debe inicializarse una nueva transacción de lo contrario estaremos "reutilizando" una que ya había llegado a su fin, para hacerlo solo debí como les dije inicializar de esta manera mi nueva transacción:

 SqlTransaction transaction = sqlConn.BeginTransaction();}

¡Saludos! 

jueves, 13 de octubre de 2022

Mantemiento/Reducción de logs SQL Server

El siguiente script es básico para el mantenimiento de nuestras bases de datos, la reducción de los logs nos ahorrara mucho espacio en nuestro disco:

 use NUESTRA_BD 
ALTER DATABASE NUESTRA_BD
SET RECOVERY SIMPLE;
GO
--Reducimos el log de transacciones a  1 MB.*/
DBCC SHRINKFILE(NUESTRA_BD_log, 1);
GO
-- Cambiamos nuevamente el modelo de recuperación a Completo.*/
ALTER DATABASE NUESTRA_BD
SET RECOVERY FULL;
GO

Ver tamaño de las bases de datos en SQL Server

¿Queremos evitar estar viendo los files de cada base de datos para conocer su tamaño?, les dejo una consulta en SQL Server que les dará el tamaño del archivo mdf y ldf, de cada base de datos de su instancia, ejecútenla sobre la BD Master:
 
with fs
as
(
select database_id, type, size * 8.0 / 1024 size from sys.master_files
)
select name,
(select sum(size) from fs where type = 0 and fs.database_id = db.database_id) DataSizeMB,
(select sum(size) from fs where type = 1 and fs.database_id = db.database_id) LogSizeMB,
((select sum(size) from fs where type = 0 and fs.database_id = db.database_id)+ (select sum(size) from fs where type = 1 and fs.database_id = db.database_id))
TotalDatabaseSizeMB
from sys.databases db
order by TotalDatabaseSizeMB DESC

¡Saludos!.

lunes, 28 de enero de 2019

Quitar carácter especial en consulta SQL Server


Tuve por varios días un problema que surgió por una comilla simple que SQL Server traducía como caracter especial las cuales venían de un sistema auxiliar de SAP y que cargaba por DTW, esto hacia que no pudiera hacer un Join pues las descripciones eran distintas entre un sistema y otro, como no hallaba la solución a través de alguna función o de forma nativa desde SQL Server para eliminarla y ante mi carga de trabajo que me impedía seguir buscando, decidí darle rienda suelta a mi imaginación y pues aquí les dejo mi solución, si tienen una mejor, no sean malos déjenla en los comentarios.

Utilizando el CHARINDEX y el SUBSTRING creo nuevas descripciones uniformes dentro de una tabla creada a partir de una subconsulta la cual uno con otra subconsulta con las tablas de SAP, para ya sin el caracter especial hacer el match.

select * from (
 select NOM_GEN_POL as [Nombre Poliza Sistema Aux], replace(Ref1,'Pól','Pól')  as [Nombre Poliza SAP], FECHA_GEN_POL as [Fecha Poliza], [Importe Poliza SAP]  , [Importe Poliza Sistema Aux]
from (
select CONVERT(Decimal(15,2),SUM(c.IMPORTE),2) as [Importe Poliza Sistema Aux]
,CASE when b.NOM_GEN_POL like '%PEÑ%' then SUBSTRING(b.NOM_GEN_POL,0, CHARINDEX('PEÑ', b.NOM_GEN_POL) + 2) + SUBSTRING(b.NOM_GEN_POL,CHARINDEX('PEÑ', b.NOM_GEN_POL) + 3, 20) else b.NOM_GEN_POL end as NOM_GEN_POL, b.FECHA_GEN_POL
from Sistema_Aux.dbo.RH_ENC_POL  b
inner join  Sistema_Aux.dbo.RH_POLIZA_NOMINA a on a.CLA_GEN_POL = b.CLA_GEN_POL
inner join  Sistema_Aux.dbo.RH_DET_POL_IND c on a.NUM_NOMINA = c.NUM_NOMINA
and c.TIPO_CAR_CRE = 2
and c.CLA_PERIODO = a.CLA_PERIODO
and b.FECHA_GEN_POL > '20180531'
group by b.NOM_GEN_POL, b.FECHA_GEN_POL) Tabla_Sistema_Aux
left join (
select  CONVERT(Decimal(15,2),sum(Loctotal),2) as [Importe Poliza SAP], TransCode
, CASE when Ref1 like '%PEÃ%' then SUBSTRING(isnull(Ref1,''),0, CHARINDEX('PEÃ', isnull(Ref1,'')) +2) + SUBSTRING(isnull(Ref1,''),CHARINDEX('PEÃ', isnull(Ref1,'')) + 4, 20) else Ref1 end as ref1--, RefDate
from OJDT
where  TransType = 30 and TransCode in ('NO01','FN01')
and RefDate >  '20180531'
group by transcode, Ref1)--, RefDate)
Tabla_SAP On (replace(replace(Tabla_SAP.Ref1,'Pól','Pól'), ' - [', '- [') = replace(Tabla_Sistema_Aux.NOM_GEN_POL COLLATE Modern_Spanish_CS_AS, ' - [', '- [')
 )
 ) Consulta where isnull([Importe Poliza SAP],0) <> isnull([Importe Poliza Sistema Aux],0)
order by [Fecha Poliza]

Nota: mi versión de SQL Server es 2008 R2.