viernes, 6 de julio de 2007
Conocer el tamaño que ocupa cada tabla
IF EXISTS ( SELECT name FROM sysobjects
WHERE name = 'TamanoPorTablas'
AND type = 'U')Drop Table TamanoPorTablasGO
CREATE TABLE [TamanoPorTablas] ( [Name] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [Rows] [varchar] (18) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [reserved] [varchar] (18) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [data] [varchar] (18) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [indexsize] [varchar] (18) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [unused] [varchar] (18) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , CONSTRAINT [PK_TamanoPorTablas] PRIMARY KEY CLUSTERED ( [Name] ) ON [PRIMARY] ) ON [PRIMARY]GO
DECLARE @Tabla Varchar(100), @Query Varchar(100)
Declare CrTabla Cursor for
SELECT Name
FROM Sysobjects
WHERE TYPE = 'U'
Open CrTabla
Fetch Next From CrTabla
Into @Tabla
While (@@Fetch_Status = 0)
begin
Set @Query = 'insert into TamanoPorTablas Exec sp_spaceused '+@Tabla
Exec (@Query)
Fetch Next from CrTabla
into @Tabla
end
Close CrTabla
Deallocate CrTabla
Obtener todos los campos de una base de datos...
SELECT C.Name Campo, O.Name Tabla, T.Name as Tipo, C.Length--, *FROM SYSCOLUMNS CINNER JOIN SYSOBJECTS O ON O.Id = C.IdINNER JOIN Systypes T ON T.Xtype = C.XtypeWHERE O.xtype = 'U'ORDER BY C.Name , O.Name
Saber si un día fue fin de semana
Set @Fecha = '01/08/2007'
Set @Hoy = ( select DATEPART(WEEKDAY, @Fecha) )
if @Hoy in (7, 1) Print 'Fue fin de semana'else Print 'No fue fin de semana'
Kill todos los procesos de una DB
Create Procedure KillAllProcessInDB
@DbName VarChar(100)
as
if db_id(@DbName) = Null
begin
Print 'Especifique el nombre de la base de datos'
end
else
Begin
Declare @spId Varchar(30)
DECLARE TmpCursor CURSOR FOR
Select 'Kill ' + convert(Varchar, spid) as spId
from master..SysProcesses
where db_Name(dbID) = @DbName
and spId <> @@SpId
and dbID <> 0
OPEN TmpCursor
FETCH NEXT FROM TmpCursor
INTO @spId
WHILE @@FETCH_STATUS = 0
BEGIN
Exec (@spId)
FETCH NEXT FROM TmpCursor
INTO @spId
END
CLOSE TmpCursor
DEALLOCATE TmpCursor
end
Busca en todas las tablas de una BD
--*** PROCEDIMIENTO ALMACENADO PARA HACER UNA BUSQUEDA ***--
--*** EN CAMPOS ALFANUMERICOS DE TODAS LAS TABLAS DE UNA ***--
--*** BASE DE DATOS EN ESPECIFICO. ***--
--*** FECHA DE CREACION: 12 DE JUNIO DEL 2006 ***--
--*** CREADO POR: ELENA LOPEZ ***--
CREATE PROCEDURE BuscarTodasTablas (@SearchStr nvarchar(100))ASBEGIN
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)SET @TableName = ''SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
WHILE @TableName IS NOT NULLBEGINSET @ColumnName = ''SET @TableName = (SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))FROM INFORMATION_SCHEMA.TABLESWHERE TABLE_TYPE = 'BASE TABLE'AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableNameAND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)BEGINSET @ColumnName =(SELECT MIN(QUOTENAME(COLUMN_NAME))FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)AND TABLE_NAME = PARSENAME(@TableName, 1)AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')AND QUOTENAME(COLUMN_NAME) > @ColumnName)
IF @ColumnName IS NOT NULLBEGININSERT INTO #ResultsEXEC('SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' +' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2)ENDEND END
SELECT ColumnName, ColumnValue FROM #ResultsEND
GO
Convertir de número a letras... Stored Procedure
SELECT @lnEntero = CAST(@Numero AS INT), @lnFraccion = (@Numero - @lnEntero) * 100, @lcRetorno = '', @lnTerna = 1
WHILE @lnEntero > 0 BEGIN /* WHILE */ -- Recorro terna por terna SELECT @lcCadena = '' SELECT @lnUnidades = @lnEntero % 10 SELECT @lnEntero = CAST(@lnEntero/10 AS INT) SELECT @lnDecenas = @lnEntero % 10 SELECT @lnEntero = CAST(@lnEntero/10 AS INT) SELECT @lnCentenas = @lnEntero % 10 SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
-- Analizo las unidades SELECT @lcCadena = CASE /* UNIDADES */ WHEN @lnUnidades = 1 AND @lnTerna = 1 THEN 'UNO ' + @lcCadena WHEN @lnUnidades = 1 AND @lnTerna <> 1 THEN 'UN ' + @lcCadena WHEN @lnUnidades = 2 THEN 'DOS ' + @lcCadena WHEN @lnUnidades = 3 THEN 'TRES ' + @lcCadena WHEN @lnUnidades = 4 THEN 'CUATRO ' + @lcCadena WHEN @lnUnidades = 5 THEN 'CINCO ' + @lcCadena WHEN @lnUnidades = 6 THEN 'SEIS ' + @lcCadena WHEN @lnUnidades = 7 THEN 'SIETE ' + @lcCadena WHEN @lnUnidades = 8 THEN 'OCHO ' + @lcCadena WHEN @lnUnidades = 9 THEN 'NUEVE ' + @lcCadena ELSE @lcCadena END /* UNIDADES */
-- Analizo las decenas SELECT @lcCadena = CASE /* DECENAS */ WHEN @lnDecenas = 1 THEN CASE @lnUnidades WHEN 0 THEN 'DIEZ ' WHEN 1 THEN 'ONCE ' WHEN 2 THEN 'DOCE ' WHEN 3 THEN 'TRECE ' WHEN 4 THEN 'CATORCE ' WHEN 5 THEN 'QUINCE ' ELSE 'DIECI' + @lcCadena END WHEN @lnDecenas = 2 AND @lnUnidades = 0 THEN 'VEINTE ' + @lcCadena WHEN @lnDecenas = 2 AND @lnUnidades <> 0 THEN 'VEINTI' + @lcCadena WHEN @lnDecenas = 3 AND @lnUnidades = 0 THEN 'TREINTA ' + @lcCadena WHEN @lnDecenas = 3 AND @lnUnidades <> 0 THEN 'TREINTA Y ' + @lcCadena WHEN @lnDecenas = 4 AND @lnUnidades = 0 THEN 'CUARENTA ' + @lcCadena WHEN @lnDecenas = 4 AND @lnUnidades <> 0 THEN 'CUARENTA Y ' + @lcCadena WHEN @lnDecenas = 5 AND @lnUnidades = 0 THEN 'CINCUENTA ' + @lcCadena WHEN @lnDecenas = 5 AND @lnUnidades <> 0 THEN 'CINCUENTA Y ' + @lcCadena WHEN @lnDecenas = 6 AND @lnUnidades = 0 THEN 'SESENTA ' + @lcCadena WHEN @lnDecenas = 6 AND @lnUnidades <> 0 THEN 'SESENTA Y ' + @lcCadena WHEN @lnDecenas = 7 AND @lnUnidades = 0 THEN 'SETENTA ' + @lcCadena WHEN @lnDecenas = 7 AND @lnUnidades <> 0 THEN 'SETENTA Y ' + @lcCadena WHEN @lnDecenas = 8 AND @lnUnidades = 0 THEN 'OCHENTA ' + @lcCadena WHEN @lnDecenas = 8 AND @lnUnidades <> 0 THEN 'OCHENTA Y ' + @lcCadena WHEN @lnDecenas = 9 AND @lnUnidades = 0 THEN 'NOVENTA ' + @lcCadena WHEN @lnDecenas = 9 AND @lnUnidades <> 0 THEN 'NOVENTA Y ' + @lcCadena ELSE @lcCadena END /* DECENAS */
-- Analizo las centenas SELECT @lcCadena = CASE /* CENTENAS */ WHEN @lnCentenas = 1 AND @lnUnidades = 0 AND @lnDecenas = 0 THEN 'CIEN ' + @lcCadena WHEN @lnCentenas = 1 AND NOT(@lnUnidades = 0 AND @lnDecenas = 0) THEN 'CIENTO ' + @lcCadena WHEN @lnCentenas = 2 THEN 'DOSCIENTOS ' + @lcCadena WHEN @lnCentenas = 3 THEN 'TRESCIENTOS ' + @lcCadena WHEN @lnCentenas = 4 THEN 'CUATROCIENTOS ' + @lcCadena WHEN @lnCentenas = 5 THEN 'QUINIENTOS ' + @lcCadena WHEN @lnCentenas = 6 THEN 'SEISCIENTOS ' + @lcCadena WHEN @lnCentenas = 7 THEN 'SETECIENTOS ' + @lcCadena WHEN @lnCentenas = 8 THEN 'OCHOCIENTOS ' + @lcCadena WHEN @lnCentenas = 9 THEN 'NOVECIENTOS ' + @lcCadena ELSE @lcCadena END /* CENTENAS */
-- Analizo la terna SELECT @lcCadena = CASE /* TERNA */ WHEN @lnTerna = 1 THEN @lcCadena WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' MIL ' WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND @lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0 THEN @lcCadena + ' MILLON ' WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND NOT (@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0) THEN @lcCadena + ' MILLONES ' WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' MIL MILLONES ' ELSE '' END /* TERNA */
-- Armo el retorno terna a terna SELECT @lcRetorno = @lcCadena + @lcRetorno SELECT @lnTerna = @lnTerna + 1
END /* WHILE */
IF @lnTerna = 1 SELECT @lcRetorno = 'CERO'
SELECT RTRIM(@lcRetorno) + ' CON ' + LTRIM(STR(@lnFraccion,2)) + '/100'
END
GO
Fuente: http://portalfox.com/index.php?name=News&file=article&sid=417&mode=nested&order=0&thold=0
