Posts Tagged ‘sql server’

13 17
06
2012

The backup set holds a backup of a database other than the existing

Domingo, junio 17th, 2012

No te acostarás sin un problema más… digo… sin saber una cosa más…

Durante el día de hoy, hemos tenido el siguiente problema al restaurar una base de datos en SQL Server 2008 R2 creada desde otro equipo diferente:

Restore failed for Server ‘[SERVERNAME]’.  (Microsoft.SqlServer.SmoExtended)

Additional Information:

System.Data.SqlClient.SqlError: The backup set holds a backup of a database other than the existing ‘[DATABASENAME]’ database. (Microsoft.SqlServer.Smo)

Restore failed for server microsoft.sqlserver.smo

Restore failed for server microsoft.sqlserver.smo

La solución a este problema Restore failed for ServerMicrosoft.SqlServer.SmoExtended… al intentar restaurar una base de datos SQL Server .bak, es mucho más sencilla de lo que puede parecer en un primer momento.

En el momento en el que vayamos a restaurar la base de datos SQL Server, una vez seleccionadas todas las opciones de importación de la misma desde la pestaña General, antes de ejecutar el proceso pulsando el botón OK / Aceptar, accedemos a la pestaña Options u Opciones, y activamos la opción Overwrite the existing database (WITH REPLACE) – o Sobreescribir la base de datos existente -, tal y como se muestra en la siguiente imagen.

SQL Server - The backup set holds a backup of a database other than existing

SQL Server – The backup set holds a backup of a database other than existing

 

 

Una vez seleccionada la opción de sobreescribir la base de datos existente, ya podremos ejecutar el proceso de restauración SQL Server sin problema.

 

0 24
03
2012

Failed to access IIS metabase ASP.NET

Sábado, marzo 24th, 2012

Si estás intentando ejecutar tu aplicativo web sobre Internet Information Server (IIS) y recibes el siguiente mensaje de error

Failed to access IIS metabase

probablemente has instalado IIS después de instalar .NET Framework.

La solución pasa por reparar la instalación de ASP.NET Framework 2.0, para ello ejecutamos desde la consola de comandos de Visual Studio:

aspnet_regiis.exe -i

o desde la línea de comandos de Windows:

%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

NOTA: Comprueba tu versión concreta de .NET Framework para indicarlo en la línea anterior.

Saludos a todos

6 20
12
2011

El servicio SQL Server se detiene

Martes, diciembre 20th, 2011
SQL Server 2008 Express R2

SQL Server 2008 Express R2

Recientemente, trabajando con el gestor de base de datos de Microsoft SQL Server 2008 R2 Express, tuvimos problemas con el inicio de su servicio.

El servicio estaba establecido con arranque automático, sin embargo, al iniciar windows el servicio de SQL Server aparecía parado; y a pesar de arrancarlo manualmente, a los pocos segundos se volvía a detener.

La extrañeza llegó a nuestros corazones, ya que en ningún momento se había realizado ningún cambio en la base de datos, ni en el sistema, más allá de las típicas actualizaciones de Windows.

Tras probar en varias ocasiones el arranque manual del servicio (esperando quizás que el duendecillo de turno lo arreglara sin decir nada), finalmente buscamos errores que por suerte se registraron en el visor de sucesos de Windows.

El mensaje concreto que aparecía en el visor de eventos era:

No se pudo realizar la actualización de nivel de script para la base de datos ‘master’ porque el paso de actualización ‘sqlagent100_msdb_upgrade.sql’ detectó el error 574, estado 0, severidad 16. Se trata de una condición de error grave que podría interferir con las operaciones normales y dejar la base de datos sin conexión. Si el error se produjo durante la actualización de la base de datos ‘maestra’, impedirá que se inicie toda la instancia de SQL Server. Examine las entradas anteriores del registro de errores, emprenda las acciones correctivas adecuadas y reinicie la base de datos de forma que se puedan completar los pasos de actualización del script.

Tras un buen rato googleando, confirmamos que el problema se generó tras las actualizaciones de Windows, y encontramos la siguiente solución que exponemos a continuación:

1. Habilitamos el indicador de traza 902, para ello:

  • Abrimos el Administrador de configuración de SQL Server (lo encontrarás bajo Herramientas de configuración)
  • En Servicios de SQL Server, abrimos el diálogo de propiedades del servicio SQL Server (SQLEXPRESS)
  • Accedemos a la ficha de Opciones Avanzadas
  • Buscamos la variable “Parámetros de inicio” e incluimos “;-T902” al final del valor.

2. Iniciamos el servicio de SQL Server (en este punto el servicio ya no se detiene)

3. Nos conectamos a través de Microsoft SQL Server Management Studio al servidor

4. En propiedades del servidor, desmarcamos la opción “Implicit transactions”

Propiedades de conexión - Microsoft SQL Server Management Studio

Propiedades de conexión - Microsoft SQL Server Management Studio

5. Volvemos a detener el servicio, y eliminar el indicador de traza 902 habilitado en el punto 1.

6. Volvemos a iniciar tanto el servicio de SQL Server como del Agente SQL Server

7. Volvemos a conectarnos a través de Microsoft SQL Server Management Studio y bajo la rama Administración del explorador de objetos, botón derecho del ratón en Recopilación de datos, y habilitamos la recopilación de datos si existiera la opción.

0 22
10
2011

Habilitar la pluralización de nombres

Sábado, octubre 22nd, 2011

Recientemente me encontraba realizando un proyecto en el que estaba utilizando linq para trabajar con base de datos.

Para ello, generamos nuestro modelo de datos mapeando la base de datos a través de la funcionalidad que proporciona Visual Studio: LINQ to SQL classes.

A grandes rasgos, lo que consigues mapeando tu base de datos a través de un modelo de datos, en este caso a través de LINQ, es generar clases correspondientes a cada una de las tablas existentes.

En próximos posts nos adentraremos más a fondo en cómo funciona LINQ, porque hoy es únicamente momento de explicar cómo habilitar la pluralización de nombres.

Pues bien, como hemos dicho, por cada tabla, se crea una clase, y ahí está el fin de este artículo. El proyecto del que os hablo, lo estaba realizando en diferentes ordenadores sobre Visual Studio 2008, y daba la casualidad, de que al regenerar el modelo de datos (LINQ to classes), en ocasiones aparecían los nombres de las clases en plural y en otras ocasiones los nombres de las clases en singular.

La primera vez no le di mayor importancia, seguro por desconocimiento, y lo achaqué a algún despiste inicial en la generación del diseño de datos.

Pues bien, nada más lejos de la realidad. Estos nombres de clases en plural o singular en nuestro modelo de datos generado para linq, podemos elegir si los deseamos trabajar en plural o singular.

Para ello, simplemente debemos configurar Visual Studio de la siguiente forma:

Herramientas –> Opciones

Dentro del cuadro de diálogo de Opciones, expandimos la sección de Herramientas para base de datos, para seleccionar a continuación la opción O/R Designer.

Una vez llegados a este punto, simplemente debemos elegir True o False para habilitar o no la pluralización de nombres del diseño de bbdd.

Nombres en plural modelo de datos LINQ

Nombres en plural modelo de datos LINQ

Para más información podéis acceder al siguiente enlace de microsoft: activar y desactivar la pluralización

4 05
10
2010

Letra Capital Con SQL

Martes, octubre 5th, 2010

Cuando hablamos de letra capital, estamos hablando del estilo de texto en el que la primera letra de cada palabra aparece en mayúscula, y el resto de la palabra, en minúscula.

Es Decir, Algo Como Esta Frase Que Estás Leyendo Ahora Mismo, O Como El Título De Este Post.

Esto puede ser útil por ejemplo para formatear nombres propios de personas, o por ejemplo, nombres de ciudades: Gran Canaria.

En algunos lenguajes de programación,  existen funciones ya predefinidas que te ofrecen esta posibilidad (como por ejemplo ucwords en PHP), pero … ¿y en lenguaje SQL?

En motores de gestión de base de datos como Oracle, contamos con una función predefinida que convierte a mayúsculas el primer caracter de cada palabra de una cadena: InitCap.

Sin embargo, en otros sistemas de gestión de base de datos como MySql o SqlServer, tendremos que “buscarnos la vida“.

A continuación veremos 2 funciones que nos permitirán modificar nuestras cadenas de texto combinando MAYÚSCULAS y minúsculas directamente en nuestras consultas SQL.

La idea es sencilla: recorreremos la cadena de texto letra por letra en búsqueda de espacios en blanco o cualquier otro carácter separador, marcando con ayuda de una bandera o flag, la indicación de que debemos convertir la siguiente letra en mayúscula.

Letra Capital / Mayúscula-Minúscula En MYSQL

DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`UCWORDS` $$
CREATE FUNCTION `test`.`UCWORDS` (input VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
  -- Declaración de variables
  DECLARE i INT DEFAULT 0;
  DECLARE length INT;
  DECLARE flag TINYINT DEFAULT 1;
  DECLARE output VARCHAR(255) DEFAULT '';

  -- Para evitar sorpresas, pasamos toda la cadena de texto a minúsculas
  SET input = LOWER(input);
  -- Guardamos la longitud de la cadena a recorrer para utilizarla a continuación
  SET length = LENGTH(input);

  -- Recorremos toda la cadena de texto
  WHILE (i <= length) DO
    IF (flag=1) THEN
      -- El flag estaba activado, lo que significa que habíamos encontrado un espacio en blanco y debemos pasar a mayúscula el carácter actual.
      SET output = CONCAT(output, UPPER(MID(input, i, 1)));
      SET flag = 0;
    ELSE
      SET output = CONCAT(output, MID(input, i, 1));
    END IF;
    IF (MID(input, i, 1) IN (' ', ',', ';', '.', ':', '!', '?', '_', '-', '/', '&', '''', '(', ')')) THEN
      -- Hemos encontrado un espacio en blanco, por lo que activamos nuestra bandera para la próxima iteración.
      SET flag = 1;
    END IF;
    SET i = i+1;
  END WHILE;

  RETURN output;

END $$

DELIMITER ;

Letra Capital / Mayúscula-Minúscula En SQLSERVER


-- =============================================
-- Author:		v3rgu1.com
-- Description:	Función que permite capitalizar
--              un String
-- =============================================
ALTER FUNCTION [dbo].[InitCap]
(
	-- Parámetros
	@INPUT AS VARCHAR(4000)
)
RETURNS VARCHAR(4000)
AS
BEGIN
	-- Declaración de variables
	DECLARE @I AS INT
	DECLARE @LENGTH AS INT
	DECLARE @FLAG AS BIT
	DECLARE @OUTPUT AS VARCHAR(4000)

	-- Inicializamos el contador a 0
	SET @I = 0;
	-- Para evitar sorpresas, pasamos toda la cadena de texto a minúsculas
	SET @INPUT = LOWER(@INPUT);
	-- Guardamos la longitud de la cadena a recorrer para utilizarla a continuación
	SET @LENGTH = LEN(@INPUT);
	-- Inicializamos la bandera como activa para capitalizar la primera letra de la cadena
	SET @FLAG = 1;
	SET @OUTPUT = '';

	-- Recorremos toda la cadena de texto
	WHILE (@I <= @LENGTH) BEGIN
		IF (@FLAG = 1) BEGIN
			-- El flag estaba activado, lo que significa que habíamos encontrado un espacio en blanco y debemos pasar a mayúscula el carácter actual.
			SET @OUTPUT = @OUTPUT + UPPER(SUBSTRING(@INPUT, @I, 1));
			SET @FLAG = 0;
		END ELSE BEGIN
			SET @OUTPUT = @OUTPUT + SUBSTRING(@INPUT, @I, 1);
		END
		IF (SUBSTRING(@INPUT, @I, 1) IN (' ', ',', ';', '.', ':', '!', '?', '_', '-', '/', '&', '''', '(', ')')) BEGIN
			-- Hemos encontrado un espacio en blanco o algún caracter separados,
			-- por lo que activamos nuestra bandera para la próxima iteración.
			SET @FLAG = 1;
		END
		SET @I = @I + 1;
	END -- WHILE

	RETURN @OUTPUT
END