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

sábado, septiembre 14, 2013

Problemas al intentar depurar una instruccion en el SQL Server Managment Studio ?

Esto me ha pasado varias veces; al intentar ejecutar un script en MSSSMS en modo depuración, me salta el error:

No se puede iniciar la sesión de depuración de T-SQL. No se puede conectar con el proceso de SQL Server

Aunque hay distintas causas posible para este error, la mas común resulta ser que el usuario bajo el cual se inicio la sesión en el MSSSMS no tiene el permisos "sysadmin".  La solución?  ejecute esta instrucción y, con un poco de suerte, el problema será historia:

EXEC sp_addsrvrolemember 'Domain\Name', 'sysadmin'



viernes, octubre 21, 2011

SQL Server: una forma rapida de crear un IN dinamico

Esta es una situación que seguro les ha pasado muchas veces. Tienen un SP que recibe un parametro usado para filtrar sobre una tabla, digamos @status. Normalmente haríamos algo como esto:

SELECT * 
  FROM tabla
 WHERE (@status IS NULL OR status = @status)


Eso nos permitiria filtrar por un status especifico o no filtrar por status, indicando el valor NULL. Pero luego nos topamos con una situación en la que necesitamos filtrar por DOS valores de status distintos, digamos, registros ACTIVOS y ANULADOS. Obviamente nuestra primera intención es hacer:

SELECT * 
  FROM tabla
 WHERE (@status IS NULL OR status IN (@status))


lo cual no es una instrucción valida para SQL Server, sin importar lo logico que se vea. Normalmente la solución a esta situación pasa por la creación de una función que tome un VARCHAR con la lista de valores separados por coma y devuelva un TABLE con los valores ya separados, y luego usamos ese TABLE para hacer un FULL JOIN o un IN (SELECT).

Pero hoy encontre una solución bien sencilla, usando las desconocidas (al menos para mi) capacidades XML de SQL Server. La idea, basicamente, es usar la lista de valores para crear un XML y luego usar ese XML como una fuente datos en un IN (SELECT). Aplicando esto al ejemplo que mencionaba al principio, la cosa quedaria asi:

DECLARE @x XML
SET @x = '' + REPLACE( @status, ',', '') + ''

SELECT * 
  FROM tabla
 WHERE status IN (SELECT x.j.value('.', 'VARCHAR(max)') AS item FROM @x.nodes('//j') x(j))


Simple, cierto?

martes, septiembre 13, 2011

M$: Como instalar MSSMSE en Windows Vista/7

Hoy estaba intentando instalar el SQL Server Managment Studio Express en un Windows 7 64bits cuando, oh sorpresa, el instalador fallo al final sin mas informacion que un error criptico.

Una rapida busqueda en Google me llevo a este link, donde indicaban somo solventar el problema:

1. Vaya al escritorio y cree un nuevo acceso directo
2. Apunte el acceso directo a c:\Windows\SysWow64\cmd.exe
3. Guarde el acceso directo
4. Haga click derecho sobre el acceso directo y seleccione "Ejecutar como Administrador"
5. En la linea de comandos, escriba la ruta y nombre del instalador del MSSMSE, ej: C:\Users\[YOUR NAME]\Downloads\SQLServer2005_SSMSEE_x64.msi

jueves, julio 07, 2011

NETCF: Conectar con un servidor SQL Server remoto

En este blog he publicado varios posts relacionados con los problemas que se presentan a la hora de conectar una aplicacion de Windows Mobile con un servidor SQL Server mediante la red WiFi.

Ahora quisiera anadir uno mas para la lista. Resulta que en muchas redes, debido a alguna configuracion que desconozco, WM es incapaz de resolver un nombre de host, es decir, que si intentamos conectarnos con una cadena como esta:

Server=AdminServer;uid=sa;pwd=sasa;Database=SysData;

WM deberia ser capaz de resolver el nombre AdminServer y obtener su IP real. Como decia, esto no siempre es posible y, cuando WM no puede resolver el nombre, el resultado es el muy conocido error SQL Server Not Found.

Seguramente hay varias formas de resolver esto. En mi caso, opte por intentar resolver el nombre del server y, de ser necesario, solicitar al usuario el IP de dicho server. Con ambos datos, creo una entrada en el archivo Hosts del Windows Mobile a fin de asegurarme que siempre podra resolver el nombre del server, independientemente de la configuracion de la red.

Para hacer esto, necesitamos dos cosas:

a) Dado un nombre de host, como obtener su direccion IP:
using System.Net;
private string resolveHost(string host)
{
  string hostIP = string.Empty;
  try
  {
      IPHostEntry IPHost = Dns.GetHostEntry(host);
      hostIP = IPHost.AddressList[0].ToString();
  }
  catch (System.Net.WebException webEx)
  {
       MessageBox,Show(webEx.Message);
  }
  catch (System.Exception othEx)
  {
       MessageBox.Show(othEx.Message);
  }

  return hostIP;
}

b) Habiendo obtenido el IP, bien sea por resolucion del host o porque el usuario lo indico, procedemos a crear una entrada en el archivo Hosts (que en WindowsMobile se maneja a nivel del Registry):
using Microsoft.Win32;

string hostName = "AdminServer";
string hostIP = "192.168.2.2";
string regKeyName = "HKEY_LOCAL_MACHINE\\Comm\\Tcpip\\Hosts\\" + hostName;
byte[] regKeyValue = System.Net.IPAddress.Parse(hostIP).GetAddressBytes();
Registry.SetValue(regKeyName, "ipaddr", regKeyValue, RegistryValueKind.Binary);


Otro As bajo la manga a la hora de resolver este problema tan molesto.


miércoles, septiembre 29, 2010

Otra de Microshit!!

Hoy tuve la "dicha" de intentar instalar el SQL Server 2008 Managment Studio Express en mi equipo con Windows XP SP2.

Resulto que el ejecutar las reglas de validacion de la instalacion saltaron dos problemas de esos en los que M$ es especialista.

1) Falla en la regla Sql2005SsmsExpressFacet, incluso despues de haber desinstalado el SQL Server 2005 Managment Studio Express. La solucion a esto fue modificar en el register la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsfoft\Microsoft SQL Server y renombrar la clave "90" temporalmente durante la instalacion.

2) Falla en la regla VSShellInstalledRule, relacionado con no tener instalado el SP1 de Visual Studio 2008. Con lo delicado que es el VS2008 la verdad no tenia mucho interes en instalar el fulano SP1, asi que la solucion paso por dos pasos:

a) Ejecutar el instalador del Managment Express manualmente e indicarle que ignorara esa regla:

SETUP /ACTION=install /SkipRules=VSShellInstaled RebootRequiredCheck

b) Cambiar en el register el valor de la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevVis\VS\Servicing\9.0\SP segun como se indica aqui

Una vez finalizada la instalacion, se reversan los cambios hechos en el register y listo.


miércoles, agosto 04, 2010

WM: Una nueva luz al problema "SQL Server not found"

Después de casi cuatro años de haber empezado mi primer proyecto con Windows Mobile... y descubrir la HORRIBLE realidad de lo difícil que puede llegar a ser lograr que el emulador de Windows Mobile se conecte a una instancia de SQL Server corriendo en tu equipo, POR FIN, encontré algo que parece solucionar definitivamente el problema.

Para los que apenas se están empezando a topar con esta realidad, o para las que ya la han sufrido y aun no entienden bien cual es el problema, he aqui lo que he aprendido en estos cuatro años:

1. Debes desactivar el firewall de Windows o al menos asegurarte que no esta bloqueando el puerto que este utilizando SQL Server, normalmente el 1433.

2. Debes asegurarte que tu instancia de SQL Server, especialmente si es una versión Express, este preparado para aceptar conexiones remotas. En Google es fácil encontrar los pasos para poder activar esto.

3. Si por casualidad tienes varias instancias de SQL Server corriendo simultáneamente en tu equipo, JAMAS LOGRARAS QUE EL EMULADOR SE CONECTE. Porque? la verdad aun no lo se, pero este era mi caso, y era la causa por la que, a pesar de tener todo perfectamente configurado, me era imposible establecer la conexión. La solución? detener todas las instancias de SQL Server a excepción de la que necesitas usar con el emulador. Probablemente haya alguna forma de evitar esto, pero aun no la he encontrado.

4. Todo lo que se necesita para conectar el emulador a tu equipo es "ponerlo en la cuna" o "cradle", que en el caso del emulador, se puede hacer a través del Device Emulator Manager.

5. Para poder conectarte al SQL Server desde el emulador SIN necesidad de hacer cradle, debes instalar en tu equipo el Microsoft Loopback Adapter y luego configurar la tarjeta de red del emulador para que se conecte con ese adaptador.