viernes, 21 de marzo de 2014

SQL Server - Listar Nombres de Columnas de Tablas Temporales

De vez en cuando, tenemos que trabajar con tablas temporales, ya sea que estamos en medio de cursores, trabajando con los nuevos operadores PIVOT y UNPIVOT, etc. para insertar, recuperar o transformar datos.

Si tenemos que hacer nada más que consultas de los datos de la tabla temporal, y suponiendo que mi tabla temporal se llama "temptable", solo hay que hacer


SELECT * FROM [tempdb].[dbo].[temptable]



Ahora bien, hay veces que necesitamos listar los nombres de las columnas de nuestra tabla temporal. Si fuera una tabla de nuestra base de datos, llamada "MiTablita", eso lo podríamos saber haciendo:


SELECT COLUMN_NAME
FROM information_schema.columns
INNER JOIN information_schema.tables ON (information_schema.columns.TABLE_NAME = information_schema.tables.TABLE_NAME)
INNER JOIN sysobjects ON (information_schema.tables.TABLE_NAME = sysobjects.name)
WHERE sysobjects.xtype = 'u' AND information_schema.columns.TABLE_NAME = 'Tablita'



Pero si es una tabla temporal no la vamos a encontrar en "information_schema" sino en "tempdb.information_schema" así:


SELECT COLUMN_NAME
FROM tempdb.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'temptable'



martes, 20 de agosto de 2013

Habilitar y Deshabilitar Constraints en SQL Server

-- Deshabilitar Constraints
ALTER TABLE [tabla]
NOCHECK CONSTRAINT [nombre_restriccion]
GO

-- Habilitar Constraints
ALTER TABLE [tabla]
CHECK CONSTRAINT [nombre_restriccion]
GO

domingo, 2 de junio de 2013

Trabajar con diferentes versiones de Python en Linux con Pythonbrew

Hay veces que necesitamos trabajar con distintas versiones de Python en nuestro equipo, para ello una de las alternativas mas fáciles de instalar y usar es pythonbrew.

En este blog el autor explica paso a paso como hacerlo.

miércoles, 11 de abril de 2012

SQL Server: Problema al reducir el archivo de LOG

Una vez me pasó que intenté reducir el LOG de una base de datos y la consulta arrojaba este mensaje:
"No se puede reducir el archivo de registro 2 porque no hay el espacio mínimo de registro necesario."
Después de tanto buscar, encontré la solución en el blog de Andrés Naranjo.
Hay que cambiar el modo de recuperación de la base de datos de completa a simple.
Manos a la obra entonces:
ALTER DATABASE NombreBD
SET RECOVERY SIMPLE;
GO

--  nombreArchivo_Log debe ser el nombre lógico de la base de datos,
--  verificar este parametro en las propiedades de la base de datos opción  archivos

DBCC SHRINKFILE (NombreBD_log, 1)
GO

ALTER DATABASE NombreBD
SET RECOVERY FULL
GO

martes, 12 de julio de 2011

Consultas Distribuidas I - Habilitar el MSDTC en XP para SQL Server

Siempre lo mismo, resuelvo alguna tarea complicadísima y no la documento como es debido, pasa el tiempo y se da el mismo escenario en otro cliente y.... CHAN!!! No me acuerdo como lo había resuelto!!!! (Vale aclarar, debido a éstas cuestiones fue que nació éste blog)
Pues bien, eso mismo me volvió a pasar hace unos días así que (como ya tengo mi ayuda memoria "on web") comparto, para los usuarios hispanoparlantes el paso a paso de una de las tareas más "rompecocos" con las que me toco lidiar:
Hacer consultas DML distribuidas entre servidores MS SQL 2000
Estas, como algunos sabrán, son los SELECT, INSERT, UPDATE O DELETE con JOIN en donde una (o más) de las tablas combinadas pertenecen a distintos servidores (uno el local y los otros remotos). Por ej. "Si quisieramos consultar todos los registros que no existen de una tabla x del servidor remoto en la misma tabla x pero del servidor local" escribiriamos los siguiente:
SELECT * 
FROM [SERVIDOR_REMOTO].[DB_REMOTA].[dbo].Tabla_X TablaRemota_X
WHERE NOT EXISTS (
   SELECT *
   FROM Tabla_X TablaLocal_X
   WHERE Tabla_X.Id = TablaRemota.Id)
GO
Este escenario se podría dar en un ambiente de replica de SQL Server (de hecho es una de las consultas que estaba haciendo hace un rato). Si quisieramos ejecutar esta consulta el motor nos daría el siguiente error:

Iniciamos en el "Administrador de SQL Server" el servicio de "Coordinador de Transacciones distribuidas" o (MSDTC) y, si queremos, tildamos para que se ejecute al iniciar con el sistema operativo.
Al hacer ésto nos puede aparecer el siguiente mensaje de error:
Error 1068: no se puede iniciar el servicio o grupo de dependencia.
Si luego de iniciado el MSDTC nos da la siguiente pantalla de error al ejecutar nuestra consulta a un servidor linkeado:
"[OLE/DB provider returned message: No se puede dar de alta la nueva transacción en el coordinador de transacciones especificado. ]
Traza de error de OLE DB [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].
No se puede realizar la operación. El proveedor OLE DB 'SQLOLEDB' no pudo iniciar una transacción distribuida." y blablablabla
Hay que habilitar un par de cosillas en el MSDTC:
Vamos a inicio --> ejecutar y escribir DCOMCNFG y apretamos Enter.
Se abre el administrador de "Servicios de Componentes": Hacemos click en el ícono "Servicios de Componentes", luego en la carpetita "Equipos" y, en el ícono "Mi PC", hacemos click con el control derecho y nos dirigimos a "propiedades". Una vez dentro de la ventana de propiedades tildamos la pestaña MSDTC y apretamos el botón "Configuración de seguridad..." y tildamos "Acceso a DTC desde la red", "Permitir clientes remotos", "Permitir administracion remota", "permitir entrantes" y "permitir salientes" y "no se requiere autenticación"
Luego de aceptar todo, reiniciamos los servicios del SQL Server Y ahí debería ya funcionar nuestra consulta LDM (SELECT, INSERT, UPDATE o DELETE) distribuida.

viernes, 22 de abril de 2011

Oracle anuncia "Java Magazine", una revista online sobre Java gratuita

Este lunes Oracle anunció Java Magazine, una revista online sobre Java gratuita. La revista todavía no ha publicado ningún número, y el primero no aparecerá hasta finales de julio. A partir de entonces será una revista bimensual electrónica gratuita que, según Oracle, será "una esencial fuente de conocimiento sobre la tecnología Java".


La revista no estará disponible abiertamente online, sino que requerirá registro (gratuito) para poder acceder a los números. En el registro se os despedirá bastante información personal (más de la que al menos yo considero razonable). Aunque el primer número no estará disponible hasta julio, el registro ya se ha abierto.

Fuente: JavaHispano

miércoles, 16 de marzo de 2011

Cambiar de Plataforma de Destino en Visual Studio sobre .NET CF

Uffff!!! Tarde tanto en hacer algo esta mañana y era una pavada. Dios!! Mi memoria falla cada día más!!!

Volví a trabajar con el .NET Compact Framework. Abrí mi Visual Studio y elegí el proyecto con el cual quería trabajar. Hasta aquí todo bien.
Lo que necesitaba hacer era probar un emulador de un dispositivo movil que tenía instalado pero no era el que estaba predeterminado al abrir el proyecto y el el cual me mostraba en el entorno del VS al inicio.


Al querer cambiar de plataforma desplegando la ventanita solo me mostraba el dispositivo que se ve en la figura. No acá no era...

- "A ver... Era acá?" - Me dije, haciendo click en el icono resaltado de la figura a continuación...


- "Ah!! Creo que acá era!!" - Afirmé, incrédulo, al abrirse la ventana de opciones y mostrar los dispositivos instalados para la plataforma:


Al elegir Pocket PC 2003 y aceptar miré, para mi sorpresa que no me cambiaba al dispositivo en el menú principal. Entonces?!?!? Cómo era?!?!?

Después de hurguetear en el ayuda un rato, encontré que hay que ir al menú "Proyecto" --> "Cambiar plataforma de destino..." y ahí si, indicarle con cual plataforma queremos trabajar:



Nos preguntá si deseamos cerrar y volver a abrir el proyecto para que pueda cambiar de plataforma...


Le decimos que si y listo, problema resuelto.