¿Cómo ejecutar una consulta SQL directa utilizando entity framework?

Es curioso para mi hacer esta entrada ya que cuando utilizamos un ORM de alguna manera casí nunca es necesario hacer consultas Sql para obtener o modificar datos de la base de datos, pero algunas veces nos es más fácil hacer la consulta ya sea por comodidad o ya sea un caso muy especial. Para no recurrir al famoso SqlCommand y sus derivados Entity Framework nos permite realizar una consulta en crudo de la siguiente manera:


//creamos nuestro objeto context
NuestroEntitie db= new NuestroEntitie();

//ExecuteSQLCommand invoca la consulta capturada
db.Database.ExecuteSqlCommand("update tabla set campo=1 where id>1000 and fecha>getdate()");

Ejecutar una cadena como consulta en SQL Server #SQLServer

Para ejecutar una cadena en Transact-SQL como una consulta, existe el procedure de nombre sp_sqlexec, este recibe la cadena la cual ejecuta. Esto nos sirve para consultas dinámicas pero no es recomendable a menos que se tenga bien planteada la seguridad para evitar travesuras de los “hackers”.

Ejemplo:

declare @cadena varchar(max)='select * from tabla'

exec sp_sqlexec @cadena

¿Como conectarse a puerto no estándar en SQL Server Management Studio? #1433

Para conectarse a un puerto distinto al que es por defecto (puerto 1433) en el motor de SQL Server, basta con agregar el puerto en el campo de nombre de servidor (server name) de la siguiente manera:

NombreDelServidor, 12121

El nombre del servidor, ya sea dominio, IP, o nombre de instancia (SERVIDORSQLEXPRESS), seguido de coma y puerto. Por si no queda claro ahí va un ejemplo: si nuestro servidor esta en la ip 211.168.1.100 y el puerto por el cual tenemos que conectarnos es el 12345, sería de la siguiente manera:

211.168.1.100,12345

Y los demas datos (Login, Password) van de la misma manera que si fuera una conexión a el puerto normal.

Group_concat en #SQLServer, concatenar campos de un agrupamiento como en #mysql.

En este artículo explico cómo realizar una concatenación de un campo de una agrupación en SQL Server (algo parecido a lo que se obtiene con la función group_concat de mysql). Esto sirve para obtener en un registro todos los campos distintos de dicha agrupación. Por ejemplo, tenemos la siguiente tabla de nombre EstadoMunicipio:

tabla sql server - estados municipios

Suponiendo que deseamos agrupar los estados y obtener en un campo al lado la concatenación de sus municipios, eso en mysql se hace con una función llamada group_concat, en SQL Server no existiendo dicha función (que nos facilita todo) podemos obtener el mismo resultado utilizando la función Stuff de Sql Server, pero de una manera especial, como planteo en el siguiente query:

SELECT 
     Estado,
     STUFF(
         (SELECT  municipio +', ' 
          FROM EstadoMunicipio
          WHERE estado = a.estado
          FOR XML PATH (''))
          , 1, 0, '')  AS [Municipios Concatenados]
FROM EstadoMunicipio AS a
GROUP BY Estado

Este es el resultado:

resultado query group_concat sql server

De esa manera podemos realizar algo como lo que hace la función group_concat de mysql.

Si desean utilizar este query, basta con que sustituyan el nombre de la tabla EstadoMunicipio por el nombre de la que tengan ustedes, sustituyan también el nombre del campo municipio, el nombre del campo estado (que es el que utilizamos para agrupar) y la unión realizada en el where, por el campo por el cual están agrupando.