Database diagram support cannot be installed because this database does not have a valid owner. Solucionado

18 11 2009

Este error se presento al querer mostrar los diagramas de SQL Server, al principio crei que se debia a un error de configuración en el cliente del SQL Server Management Studio, sin embargo el error que mencionaba era el siguiente.

Database diagram support cannot be installed because this database does not have a valid owner.
To continue, first use the Files page of the Database Properties dialog box or ALTER AUTORIZATION statement to set the database owner to a valid login, then add the database diagram suppoert objects.

Como se menciona en el mensaje habra que establecer un usuario válido como dueño de la Base de Datos, en mi caso tenia el de NombreMaquina\Administrator. asi que se lo cambie al usuario sa

ALTER AUTORIZATION ON DATABASE::dbname TO sa

O bien desde la interfase gráfica del SQL Server Management Studio.

Si esto no funciona prueba, esta otra solución o revisen este hilo.

Saludos.





Calcular el primer dia y el ultimo de un mes dado, en SQL

4 11 2009

Para el acordeón, una forma de calcular el dia inicial y final de un mes, esto con el fin de determinar si un mes tiene 28, 30 o 31, es de la siguiente manera.

declare @mes varchar(2)
declare @fecha as varchar(8)
set @mes = '02'
set @fecha = '2009' + @mes + '01'
select @fecha AS FECHA_INICIAL,
	CAST (@fecha as smalldatetime) AS FECHA_INICIAL,
	dateadd(m,1, CAST (@fecha as smalldatetime)) AS FECHA_SIGUIENTE,
	dateadd(d,-1,dateadd(m,1, CAST (@fecha as smalldatetime))) AS FECHA_FINAL

Un escenario que me imagino para usarlo es en el que se requiere calcular o ejecutar un proceso en un mes en particular (fecha entre un rango inicial y final), sin embargo, esto es solo una curiosidad, porque tambien es posible hacer un calculo para un mes en particular poniendo en la condicion algo así como esto

SELECT * FROM TABLA WHERE MONTH(FECHA)=@MES

Sin embargo, creo que hacerlo de esta manera, de tener un índice la TABLA en cuestión no se usuaría en la consulta, no así si usaramos una condición de tipo between @FECHA_INICIAL AND @FECHA_FINAL. Que alguien me corriga, si tengo la idea errónea.





Ayuda con la sintaxis para ejecutar DTS con DTSRun, usando DTSRunUI

8 05 2009

Hace poco se nos presentó un problema con un Job de SQLServer 2000, la descripción de la falla indicaba lo siguiente:

Executed as user: NT AUTHORITY\SYSTEM.
Line 1: Incorrect syntax near ‘/’.
[SQLSTATE 42000] (Error 170) The identifier that starts with ‘Z0×662C096C16742FAD8CDB6A2BED09B343726B56DC63026D657
E0B5D08C6C8BAF4A49AD11C72729B9A6945B8E0A4568BE4E4CD6
AAD2A7B47C0F5147EA2DF12C’ is too long.
Maximum length is 128.
[SQLSTATE 42000] (Error 103). The step failed.

(1 row affected)

Buscando la razón de la falla, me tope con la posible solución en la página de SQLDTS, que explica como usar la interfaz gráfica para la ejecución de DTS (Paquetes de Transformación de Datos) con DTSRunUi.

Es posible programar un paquete DTS desde el Enterprise Manager, esto hace que se genere un job y en los pasos dentro de las propiedades se incluya un comando del SO que llama al DTSRun con algo así como: DTSRun /~Z0xD3D4C356186A9DC77B1EE2E50C9A… esta cadena es posible generarla con la herramienta DTSRunUI

Leer el resto de esta entrada »





Obtener el número de registros de una tabla sin hacer select count(*)

16 10 2008

Una forma de obtener el numero de registros de una tabla en SQLServer aparte del clásico:

SELECT COUNT(*)
  FROM NombreTabla

es consultando la tabla del systema sysindexes del siguiente modo:

SELECT rows
  FROM sysindexes
  WHERE id = OBJECT_ID('NombreTabla') AND indid < 2

La ventaja de ésta forma es que se evita que se recorra la tabla o algún índice para obtener el número exacto de registros, esto es útil en tablas con millones de registros, al hacerlo de la primera forma se lleva tiempo en devolver el resultado, afectando el desempeño.

Nota: Esto es útil cuando no se requiere saber el número exacto de registros de una tabla, sin embargo, es necesario tener activado la opcion de creación automática de estadísticas en la Base de datos.





Salida delimitada por comas en una consulta en lugar de un conjunto de filas

25 07 2008

Hay ocasiones en que se necesitamos obtener el resultado de una consulta como un conjunto de valores delimitados por comas en una sola fila, en lugar de un conjunto de filas, para este menester podemos obtenerlo de dos formas distintas.

1.- Mediante un cursor:

DECLARE cursorIDs CURSOR FOR
	SELECT CLAVE FROM PRODUCTOS
	ORDER BY CLAVE
DECLARE @CodigoIDs    VARCHAR(8000)
DECLARE @CodigoID     VARCHAR(10)

OPEN cursorIDs
FETCH NEXT FROM cursorIDs INTO @CodigoID
WHILE @@FETCH_STATUS = 0
BEGIN
	SET @CodigoIDs = ISNULL(@CodigoIDs + ',', '') + @CodigoID
	FETCH NEXT FROM cursorIDs INTO @CodigoID
END

CLOSE cursorIDs
DEALLOCATE cursorIDs

SELECT @CodigoIDs AS Codigos_Productos
GO

o bien,

Leer el resto de esta entrada »





SQLServer Service Manager 2005

18 06 2008

Microsoft SQL Server 2005, no trae consigo la pequeña herramienta de SQL Server 2000, El administrador de Servicios de SQL Server (SQL Server Service Manager), que desde mi punto de vista es muy útil para administrar los servicios de SQLServer.

Si no se ubican, es el icono/aplicación que aparece en el System Tray

SQLServer Service Manager 2005 Tray Icon

Me encuentro con el blog de Bruno Capuano en el que menciona que el buen Jasper Smith, creó la herramienta que hace las veces de su casi homónino de la versión 2000.

SQLServer Service Manager

Leer el resto de esta entrada »





Snap-in failed to initialize. Error en el Enterprise Manager

6 06 2008

Tenia una instalación de la versión 2000 del SQL Server, en concreto la version MSDE (Microsoft SQL Server 2000 Desktop Engine), se me ocurrio instalar la version Developer y aplicarle el service pack 4 (ya sé que estoy algo desfasado al manejar esa versión para estas fechas, pero que puedo decir a mi favor, ¡hay circunstancias que uno no controla!), después de los reinicios requeridos, al lanzar el Enterprise Manager, este indicaba un error del siguiente tipo:

—————————
Microsoft Management Console
—————————
Snap-in failed to initialize.
Name:Administrador corporativo de Microsoft SQL Server
CLSID:{00100100-1816-11D0-8EF5-00AA0062C58F}
—————————
OK
—————————

Preguntando a dios Google para que me mostrara el camino, me encuentro con la pagina de dbforums, y de SQL Server Storage Engine & Tools intente aplicar el del segundo, haciendo una copia de la rama que pedia borrar, pero no funcionó.

Leer el resto de esta entrada »





LPAD en SQL Server, rellenando por la izquierda

3 06 2008

Me habia surgido la duda de como implementar la funcion LPAD de oracle, esa función que permite agregar caracteres comodines sobre un campo consultado.

Bueno lo que realmente hice no implica propiamente una implementación de esa función, sino mas bien como salir del paso y obtener el valor deseado. Tenía un campo númerico al que necesitaba devolverlo como una cadena de caracteres, el campo podia contener hasta dos dígitos, por tanto, si era de un solo digito anteponer el número 0, de tal modo que quede así:

01
02
03

09
10
11

99

Leer el resto de esta entrada »





Resetear un campo IDENTITY

28 05 2008

Veamos como resetear el contador de un campo autonúmerico / autoincremental ( campo IDENTITY) en una tabla de SQL Server.
Existen dos maneras de hacerlo, una es haciendo un truncate table, que lo que hace es borrar y volver a crear la tabla, y por ende se lleva entre las patas borra el valor numérico del campo(s) en cuestion (que no siempre es lo que queremos, porque perderemos todos los datos, jeje).

TRUNCATE TABLE Nombre_de_la_tabla

La otra forma es haciendo uso de la consola de comandos de la Base de Datos, DBCC, para ser mas claros, y consite en:

DBCC CHECKIDENT Nombre_de_la_tabla,RESEED,NuevoValor

Leer el resto de esta entrada »