Sql Server prevent saving on table re-creation – Error al regrabar tabla


Acá va un post recordatorio para cuando tenemos un SQL Server 2008 Management Tools, donde creamos una tabla y posteriormente queremos modificar su estructura. Seguramente, si estamos con los parámetros por defecto, no podamos grabar las modificaciones en la estructura de la tabla.

Esto se debe a un parámetro de protección configurable que previene grabar los cambios que requieren una re creación de las tablas.

Debemos deshabilitar esta opción en Tools –> Options –> Designers –>Table and Database Designers –> destildar Prevent Saving changes that requires table re-creation.

 

SQL: Concatenar varios registros de una columna en una sola cadena


Es probable que tengamos varios registros pertenecientes a una columna o campo que debamos concatenar y mostrar en una sola cadena. Algo así:

descripcion
===========
valor1
valor2
valor3

y necesitamos obtener algo así:

valor1, valor2, valor3

es decir, como si tuvieramos que trasponer la columna, pero sin complicarnos.

La solución es la siguiente:

DECLARE @valores VARCHAR(1000)
SELECT @valores= COALESCE(@valores + ', ', '') + descripcion FROM carpetas
select @valores as valores

La magia la hace el comando COALESCE que devuelve la expresión que no contenga el valor NULL entre sus argumentos.

OJO: Esta solución es válida solo si ningún renglon es NULL.

SQL Server : Desconectar Base de Datos / Bring Offline


Muchas veces necesitamos restaurar una base de datos sobre una ya existente, sabiendo que no perjudicamos ni datos ni a usuarios.

Los comandos que podemos usar para desconectar/conectar la base de datos son:

alter database "mibase" set offline
alter database "mibase" set online

y muchas veces obtendremos el siguiente error:

ALTER DATABASE failed because a lock could not be placed on database 'mibase'. Try again later.
ALTER DATABASE statement failed. (Microsoft SQL Server, Error: 5061)

esto se debe a que hay algún proceso del motor aún trabajando sobre la base de datos.

Para solucionar este problema, la manera mas rápida que encontré es simple: restartear el servicio SQLSERVER en el sistema operativo (Panel de Control –> Herramientas Administrativas –> Servicios).

 

Instalar Sql Server Management Studio Express – Error 29506


Con Windows Vista o 7 es común obtener el código de error 29506 al intentar instalar el Microsoft Sql Server Management Studio Express

Este error se debe a un problema de permisos de usuario (UAC user Account Control).

La manera mas simple de solucionarlo es ejecutar el msi como administrador:

Inicio –>Acesorios –>Click derecho sobre “Símbolo de Sistema” –> “Ejecutar como Administrador”

Vamos al directorio donde tengamos descargado el ejecutable , y lo ejecutamos, por ejemplo:

cd UsershernanDownloads>
SQLServer2005_SSMSEE_x64.msi

Listo.

Grabar NULL con DataEnvironment en VB6


Supongamos que tenemos la siguiente estructura en una tabla de SQL Server (2000,2005,2008):

id    numeric(18, 0)    
descripcion    numeric(18, 0)   
Minimo    float    Allow Nulls

Maximo    float    Allow Nulls


Y asociamos un comando en un dataenvironment para hacer un insert en esa tabla, algo asi:

insert into pruebaMinMax (id, descripcion, Minimo, Maximo) values (?,?,?,?)


Si queremos grabar un valor NULL en los campos Minimo y Maximo vamos a obtener un error “Uso inválido de NULL” dado que el comando espera un “valor” en ese parámetro.
Para que me permita grabar un valor nulo, debo modificar el Comando y en los parámetros de Minimo y Maximo establecer las siguientes opciones:
Tipo de Datos del Host: Variant (VT_VARIANT)
Necesario: False

Con estos valores vamos a poder grabar valores null en los campos de nuestra tabla.


Ejecutar SQL Server Stored Procedures desde PHP bajo Linux


Tratando de ejecutar Stored Procedures existentes en una base de datos SQL Server desde PHP bajo Linux, me encontré con el problema de que al querer ejecutar un stored procedure simple, sin parámetros, obtenía siempre el mismo error: “stored procedure execution failed”.
La sentencia de llamada era muy simple:

$conn = mssql_connect($host, $user, $pass);
mssql_select_db(‘nombredb’, $conn);
$proc = mssql_init(‘nombre_proc’, $conn);
$proc_result = mssql_execute($proc);

La solución es hacer una declaración explícita de los datos del servidor SQL Server en el archivo /etc/freetds.org de la siguiente manera:
[servidor]
        host =xxx.xxx.xxx.xxx
        port = 1433
        tds version = 8.0