Archivo

Archive for septiembre 2010

Lista de los errores corregidos en Service Pack 2 de SQL Server 2008

30 septiembre 2010 1 comentario

  En este artículo se enumera los errores corregidos en Service Pack 2 (SP2) de Microsoft SQL Server 2008.

http://support.microsoft.com/kb/2285068

Categorías: Sql Server 2005 - 2008

Eliminar las filas duplicadas de la tabla utilizando ROW_NUMBER ()

16 septiembre 2010 2 comentarios

  Para eliminar las filas duplicadas de la tabla que puede haber utilizado diversas maneras, en SQL Server 2005 y 2008 tiene la función para eliminar las filas duplicadas en una sola consulta.

Ejemplo :

CREATE TABLE #TmpEliminaFilas (Id INT, Nombre VARCHAR(50), Edad INT, Sexo BIT DEFAULT 1)

Insert Into #TmpEliminaFilas Values(1,’Luisa’,25,Default)
Insert Into #TmpEliminaFilas Values(1,’Luisa’,25,Default)
Insert Into #TmpEliminaFilas Values(1,’Luisa’,25,Default)
Insert Into #TmpEliminaFilas Values(2,’Cecilia’,24,0)
Insert Into #TmpEliminaFilas Values(2,’Cecilia’,24,0)
Insert Into #TmpEliminaFilas Values(2,’Cecilia’,24,0)
Insert Into #TmpEliminaFilas Values(3,’Adriana’,23,0)
Insert Into #TmpEliminaFilas Values(3,’Adriana’,23,0)
Insert Into #TmpEliminaFilas Values(3,’Adriana’,23,0)
Insert Into #TmpEliminaFilas Values(4,’Victor’,26,0)
Insert Into #TmpEliminaFilas Values(5,’Liliana’,28,Default)
Insert Into #TmpEliminaFilas Values(6,’Sara’,30,Default)

SELECT * FROM #TmpEliminaFilas

DELETE T FROM
(SELECT Row_Number() Over(Partition By Id,Nombre,Edad,Sexo ORDER BY Id) AS RowNumber,* FROM #TmpEliminaFilas) T
WHERE T.RowNumber > 1

SELECT * FROM #TmpEliminaFilas
DROP TABLE #TmpEliminaFilas

Categorías: Sql Server 2005 - 2008

sp_MSforeachdb ; sp_MSforeachtable – Ejecutar un mismo comando en todas las base de datos

16 septiembre 2010 Deja un comentario

 

— (sp_MSforeachdb) : Si se desea realizar un mismo comando en todas las base de datos podemos usar este
— stored procedure en vez de cursores.
— Por ejemplo deseamos ejecutar el comando DBCC CHECKDB en todas las bases de datos:

EXEC sp_MSforeachdb @command1=»print ‘?’ DBCC CHECKDB (‘?’)»

— (sp_MSforeachtable) : Es similar que el stored procedure anterior, si deseo ejecutar el mismo comando en todas las tablas de las misma base de datos se puede usar este procedimiento.
— Por ejemplo si se desea reconstruir todos los indices en la base de datos , podemos ejecutar:

EXEC sp_MSforeachtable @command1=»print ‘?’ DBCC DBREINDEX (‘?’)»

Categorías: Sql Server 2005 - 2008

sp_MShelpcolumns – Información sobre la estructura de una tabla

16 septiembre 2010 Deja un comentario

  Stored Procedure que nos muestra la informacion sobre la estructura de una tabla.

— Para ver la descripción de las columnas de una tabla
USE TuBasedeDatos
GO
EXEC sp_MShelpcolumns ‘TuTabla’
GO

Categorías: Sql Server 2005 - 2008

sp_MShelpindex – Información sobre indices en una tabla

16 septiembre 2010 Deja un comentario

  Este stored procedure da información sobre indices en una tabla

— Si deseamos obtener la informacion de los indices de una tabla
USE TuBasedeDatos
GO
EXEC sp_MShelpindex ‘TuTabla’
GO

Categorías: Sql Server 2005 - 2008

sp_MStablespace – Número de filas y el espacio usado por los indices y la tabla

16 septiembre 2010 Deja un comentario

   Stored Procedure que nos da el número de filas y el espacio usado por los indices y la tabla.

— Para deteminar el espacio usado por una determinada tabla
USE TuBasedeDatos
GO
EXEC sp_MStablespace ‘TuTabla’
GO

Categorías: Sql Server 2005 - 2008

sp_MSindexspace – Tamaño en kb de los indices de una determinada tabla.

16 septiembre 2010 1 comentario

 Stored Procedure que retorna el tamaño en kb de los indices de una determinada tabla.

— Para ver el espacio usado de los indices de la una tabla
USE TuBasedeDatos
GO
EXEC sp_MSindexspace ‘TuTabla’
GO

Categorías: Sql Server 2005 - 2008

Copiar estructura de tabla sin datos mediante una línea de consulta

9 septiembre 2010 Deja un comentario

  Copiar estructura de tabla sin datos mediante una línea de consulta.

SELECT * FROM TuTabla
SELECT * Into TuTablaTmp FROM TuTabla WHERE 1=2
SELECT * FROM TuTablaTmp 

Script para copia de seguridad de todos los Filegroups dentro de una base de datos

9 septiembre 2010 Deja un comentario

  Un simple script para copia de seguridad de todos los Filegroups dentro de una base de datos.

Esto ayudará en entornos en los Filegroups y partioning se usan para permitir una base de datos de volúmenes lapso de archivo o razones de rendimiento.

Eso sólo será posible con bases de datos utilizando el modo FULL recovery (Recuperación completa)

1) Cambiar el parámetro @DestinationPath con el parametro de tu directorio
2) Ejecutar el script contra la base de datos que desea copia de seguridad

DECLARE @DestinationPath NVARCHAR(1000)
DECLARE @BeginBackupTimestamp VARCHAR(20)

— Destino donde se almacenara la copia de seguridad
SET @DestinationPath = ‘\\SERVER-01\sqlbackupshare$\’
SET @BeginBackupTimestamp =  REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(30),GETDATE(),20),’-‘,»),’:’,»),’ ‘,’_’)

IF EXISTS (SELECT NAME FROM sys.databases WHERE name = ‘#backupcommand’)
  BEGIN
   DROP DATABASE
#backupcommand
  END

 CREATE TABLE #backupcommand (id INT IDENTITY(1,1), command VARCHAR(1000))

 INSERT INTO #backupcommand (command)
  SELECT ‘BACKUP DATABASE [‘ + DB_NAME()+‘] FILEGROUP = »’ + name + »’ TO DISK = »’ + @destinationpath  + DB_NAME() + ‘_’ + @beginbackuptimestamp +  ‘_’ + name +‘.BAK»’
  FROM sys.filegroups ORDER BY data_space_id

 DECLARE @intCounter INT
 SET @intCounter = 0

 — Se crea un cursor para recorrelo y crear la copia de seguridad
 DECLARE @intMaxId INT
 SELECT @intMaxId = MAX(ID) FROM #backupcommand
 DECLARE @CurrentCommand VARCHAR(1000)

 WHILE (@intCounter <= @intMaxId)
  BEGIN
   SET @intCounter = @intCounter + 1
   SELECT @CurrentCommand = command FROM #backupcommand
   WHERE id = @intCounter
   — Utilizar RAISERROR aquí para visualizar de inmediato
   RAISERROR (@CurrentCommand, 10, 1) WITH NOWAIT
   — Hacer la copia de seguridad
   EXEC  (@CurrentCommand)   
  END
GO

Categorías: Transact-SQL

TSQL – Obtener una tabla con la información de los archivos de una carpeta de windows

9 septiembre 2010 Deja un comentario

  Obtener una tabla con la información de los archivos de una carpeta de windows pasando un parametro

— Establezca la varible @FilePath en el directorio deseado y ejecutar el script.

— Declaración de Variables
DECLARE @FilePath VARCHAR(200)
DECLARE @tt VARCHAR(200)
DECLARE @Size VARCHAR(256)
DECLARE @FileName VARCHAR(500)
DECLARE @FileDate DATETIME

— Listados de los archivos *.bak de c:

Set @FilePath = ‘dir C:\*.BAK /-C’

DECLARE @ListadoArchivos TABLE (filename VARCHAR(200), fileSize VARCHAR(20), DateCreated DATETIME)

DECLARE @Jobs TABLE (filenamedt VARCHAR(1000))
INSERT INTO @Jobs EXEC master.dbo.xp_cmdshell @FilePath

— Recorrer la tabla @Jobs para completar la tabla @ListadoArchivos
DECLARE db_cursor CURSOR FOR SELECT * FROM @Jobs
OPEN db_cursor FETCH NEXT FROM db_cursor INTO @tt

WHILE @@FETCH_STATUS = 0
BEGIN
 BEGIN TRY
  SELECT @FileDate = CONVERT(DATETIME,SUBSTRING(@tt,0,21))
  ,@Size =SUBSTRING(LTRIM(SUBSTRING(@tt, 21, LEN(@tt))), 0, charindex(‘ ‘, LTRIM(SUBSTRING(@tt, 21, LEN(@tt)))) )
  ,@FileName = SUBSTRING(ltrim(SUBSTRING(@tt, 21, LEN(@tt))), charindex(‘ ‘, LTRIM(SUBSTRING(@tt, 21, LEN(@tt)))) , LEN(ltrim(SUBSTRING(@tt, 21, LEN(@tt)))) )
  IF(@FileDate is not null and @Size is not null and @FileName is not null )
   BEGIN
   INSERT INTO @ListadoArchivos ( DateCreated, fileSize , filename)
    VALUES (@FileDate, @Size,LTRIM(@FileName))
  END
 END TRY
 BEGIN CATCH
 END CATCH
 FETCH NEXT FROM
db_cursor INTO @tt
END

CLOSE db_cursor
DEALLOCATE db_cursor

SELECT * FROM @ListadoArchivos

Categorías: Transact-SQL