¿Cómo hacer un paginado con SQL Server?, Transact-SQL, Procedimiento Almacenado

En este video te mostrare como hacer que tu consulta este paginada, para que puedas hacer tus sistemas mas rápidos, realizando los paginados desde SQL Server mediante un procedimiento almacenado.

¿Cómo agregar y actualizar funciones de SQL Server en Entity Framework?, C# .Net

En este video te enseñare cómo es posible agregar funciones de tipo tabla de SQL Server en Entity Framework; también te enseñare como actualizar tus funciones para que no te genere errores al hacerlo.

¿Cómo agregar y actualizar procedimientos almacenados a Entity Framework?, C# .Net

En este video te explico cómo hacer un procedimiento almacenado en SQL Server, agregarlo al Entity Framework, ejecutarlo en C# .Net, y actualizarlo por si surge un cambio en nuestro procedimiento almacenado.

¿Cómo activar o desactivar un Job de SQL Agent desde una consulta?

Para desactivar un job o activarlo haremos uso de la base de datos msdb, esta base de datos guarda todas las configuraciones y elementos creados en SQL Agent.

Para desactivar un Job debemos enviar el valor 0 y para activarlo debemos enviar el valor 1, y en la siguiente consulta te digo cómo es posible hacerlo por medio del procedimiento almacenado de nombre sp_update_job:


EXEC msdb.dbo.sp_update_job
    @job_name = N'NombreDelJob',
    @new_name = N'NombreDelJob',
    @description = N'Una descripción es opcional',
    @enabled = 0 ;  -- así quedaría inactivo
GO  

¿Cómo copiar una tabla con todos sus datos en una nueva con nombre diferente en SQL Server?

Para copiar una tabla que existe en SQL Server con todos sus datos a una nueva tabla inexistente, transact-SQL nos facilita la tarea y te muestro a continuación como se hace con una línea de código:


SELECT * INTO nombre_nueva_tabla FROM tabla

¿Cómo ejecutar una URL desde SQL Server? Transact-SQL

Es posible ejecutar una url desde SQL Server, esto es útil si quieres realizar algunas tareas programadas por medio de SQL Agent, tareas que inicien por una Url de tu pagina o sistema.

A continuación te muestro cómo es posible ejecutar una URL desde Sql Server.


-- declaramos una variable cadena y ponemos la url a invocar
Declare @url varchar(max)='https://hdeleon.net/'
-- declaramos una variable entero, para guardar el id del objeto OLE que crearemos
Declare @Object as Int;
-- Una variable cadena para la respuesta
Declare @ResponseText as Varchar(8000);

-- creamos un objeto OLE
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
-- Ejecutamos la url por medio de post
Exec sp_OAMethod @Object, 'open', NULL, 'post',@url,'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT

-- imprimimos resultado
Select @ResponseText

--eliminamos nuestro id de objeto OLE
Exec sp_OADestroy @Object

Con esto ya puedes ejecutar cualquier URL desde Sql Server.

¿Cómo eliminar las sesiones o conexiones sobre una Base de datos en SQL Server?

Cuando deseamos eliminar una base de datos algunas veces Sql Server no nos lo permite ya que la base de datos está siendo utilizada. Esto puede ser por sistemas que no cierran la conexión o procesos que están conectándose las 24 horas del día.

Para eliminar las conexiones, primero debemos saber cuáles son, y para ello puedes ejecutar la siguiente consulta, remplazando el nombre de tu base de datos en la instrucción Where.


SELECT   *
FROM     sys.dm_exec_sessions
WHERE    DB_NAME(database_id) = 'Nombre_De_Tu_BaseDeDatos'

Una vez que hemos obtenido algo parecido a la siguiente lista:

Debemos ejecutar la función Kill seguida del número de la sesión (el primer campo de la imagen) a eliminar:


KILL 97

Y listo, de esa manera se elimina un proceso que nunca fue cerrado.

¿Cómo realizar un Order by o un Group by a un tipo de dato Text en SQL Server?

Como sabemos un tipo de dato Text es un tipo de datos que no se le puede aplicar un ordenamiento en SQL Server. Si intentamos hacerlo recibiremos un mensaje como este:

No se pueden comparar ni ordenar los tipos de datos text, ntext e image, excepto cuando se utiliza el operador IS NULL o LIKE.

Pero hay una forma con la cual podemos lograrlo, y es convertirlo en un tipo de dato ordenable, en este caso en un tipo varchar, como a continuación muestro:


-- Ordenamiento
select * from tabla
order by CAST(campoText AS varchar(max))

-- Agrupamiento
select CAST(campoText AS varchar(max)) from tabla
group by CAST(campoText AS varchar(max))

De esta manera podemos ordenar o agrupar un tipo de dato Text en SQL Server

¿Como recorrer una tabla con la instrucción while en SQL?

Te muestro cómo es posible recorrer una tabla por medio de una instrucción while en sql.

En el caso de mysql u otro motor solo remplazar top por su equivalente, por ejemplo en mysql: limit 0,1.

Tabla people

Código utilizado:


insert into @tabla(id,name) select id,name from people

declare @count int = (select count(*) from @tabla)

while @count > 0
begin

	declare @name varchar(max) = (select top(1) name from @tabla order by id)
	declare @id int = (select top(1) id from @tabla order by id)

	print 'Hola '+@name

	delete @tabla where id=@id

	set @count = (select count(*) from @tabla)

end 

¿Cómo liberar el espacio en el archivo .ldf de una base de datos en SQL SERVER?

El archivo .ldf de toda base de datos en sql server sirve para llevar un log de toda consulta hecha en la base de datos (todos los insert, update, select, etc etc).

Esto es útil para regresar en un punto en el tiempo y ver la base de datos como se encontraba en ese punto en su estructura y en sus datos.

Pero qué pasa cuando nuestra base de datos pesa ya un tamaño exagerado y queremos liberar el espacio de nuestro servidor. Optamos por realizar una liberación de este archivo (obviamente después de hacer los backups correspondientes).

A continuación te muestro como se debería hacer para una base de datos llamada PATODB:


ALTER DATABASE PATODB SET RECOVERY SIMPLE

GO

/* el 5 es 5 MB, se dejara el log con un tamaño de 5MB*/
DBCC SHRINKFILE (PATODB_Log, 5)

GO

ALTER DATABASE PATODB SET RECOVERY FULL

GO

Y así de simple liberamos el espacio de nuestro archivo .ldf.