Lista de los errores corregidos en Service Pack 2 de SQL Server 2008
En este artículo se enumera los errores corregidos en Service Pack 2 (SP2) de Microsoft SQL Server 2008.
Eliminar las filas duplicadas de la tabla utilizando ROW_NUMBER ()
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
sp_MSforeachdb ; sp_MSforeachtable – Ejecutar un mismo comando en todas las base de datos
— (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 (‘?’)»
sp_MShelpcolumns – Información sobre la estructura de una tabla
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
sp_MShelpindex – Información sobre indices en una tabla
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
sp_MStablespace – Número de filas y el espacio usado por los indices y la tabla
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
sp_MSindexspace – Tamaño en kb de los indices de una determinada tabla.
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
Copiar estructura de tabla sin datos mediante una línea de consulta
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
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
TSQL – Obtener una tabla con la información de los archivos de una carpeta de windows
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