miércoles, 28 de marzo de 2012

¿Cómo saber si existe una tabla en la BD?

¿Cómo saber si existe una tabla en nuestra BD? Podemos crear y usar la sig función.

Para mandar llamar la funcion

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[existeTabla]
(
    @cTableName VARCHAR(255)
)
RETURNS BIT
AS
BEGIN
    DECLARE @nReturn BIT
    SET @nReturn = 0

    IF (SELECT COUNT(*) FROM SYS.OBJECTS
        WHERE TYPE = 'U' AND UPPER(NAME) = UPPER(@cTableName)) > 0 BEGIN
        SET @nReturn = 1
    END
   
    RETURN @nReturn
END

Para mandar llamar la funcion podemos usar el siguiente query:
SELECT [dbo].[existeTabla] ('TABLA_A_BUSCAR')

Si el resultado es 1 la tabla existe, en caso contrario no existe.


viernes, 16 de marzo de 2012

Crear Indices en Tablas Temporales

Para crear indices en tablas temporales, se puede utilizar el siguiente código.

CREATE TABLE #t1 (a int, b int)
GO
CREATE CLUSTERED INDEX Idx1 ON #t1(b)
CREATE UNIQUE NONCLUSTERED INDEX Idx2 ON #t1(a)
GO
INSERT INTO #t1 VALUES ('1', '0')
GO
DROP TABLE #t1


Nota: En Variables Tabla no se pueden crear índices.

jueves, 8 de marzo de 2012

Buscar una Cadena de Texto en SPs y Funciones

Muchas veces pasa que cambiamos el nombre a alguna tabla, sp, función, etc. Y luego no sabemos en que códigos tenemos ese objeto que modificamos. Para poder sacar donde tenemos ese objeto modificado podemos ejecutar el siguiente query.

SELECT (SELECT TOP 1 NAME FROM sys.schemas WHERE schema_id = ALL_OBJECTS.schema_id) AS ESQUEMA, * 
FROM SYS.ALL_OBJECTS 
WHERE OBJECT_ID IN (SELECT ID FROM syscomments WHERE CTEXT LIKE '%Objeto_a_buscar%') 
ORDER BY SCHEMA_ID

Donde Objeto_a_buscar es la tabla, sp o funcion que deseamos buscar.

Salu2

lunes, 5 de marzo de 2012

Reindexar BD en SQL Server

Script para todas las tablas de una BD de SQL Server ...

DECLARE @cTableName VARCHAR(MAX)

SET NOCOUNT ON;

DECLARE Cur_Tablas CURSOR LOCAL FORWARD_ONLY FOR
SELECT ESQUEMAS.NAME + '.' + TABLAS.NAME AS TABLA
FROM SYS.OBJECTS TABLAS
,SYS.SCHEMAS ESQUEMAS
WHERE TABLAS.TYPE = 'U'
AND ESQUEMAS.SCHEMA_ID = TABLAS.SCHEMA_ID
ORDER BY ESQUEMAS.NAME, TABLAS.NAME

OPEN Cur_Tablas
FETCH Cur_Tablas INTO @cTableName

WHILE (@@FETCH_STATUS = 0)
BEGIN

BEGIN TRY
EXEC ('DBCC DBREINDEX ("' + @cTableName + '"," ", 70)')
PRINT @cTableName
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH

FETCH Cur_Tablas INTO @cTableName

END -- Fin del bucle WHILE

CLOSE Cur_Tablas
DEALLOCATE Cur_Tablas

jueves, 1 de marzo de 2012

Respaldos en SQL Server

Sp para realizar respaldos.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_Backup]
AS
BEGIN
declare @cPrefijo varchar(10), @cRutaBak varchar(250)
select @cPrefijo ='BD_', @cRutaBak ='C:\Backups\'

declare @cNameBak varchar(80), @cNameResp varchar(80)
select @cNameBak = @cPrefijo+dbo.dtos(getdate())+'-'+replace(str(datepart(hh,getdate()),2)+str(datepart(mi,getdate()),2),' ','0')+'.BAK'
select @cNameResp = @cRutaBak + @cNameBak

BACKUP DATABASE [BD] TO DISK = @cNameResp
WITH COMPRESSION, NOFORMAT, NOINIT,
NAME = N'BD-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
END

Para mandarlo llamar:

EXECUTE [dbo].[usp_Backup]

Liberar Memoria en SQL Server

Sp para Liberar Memoria sin necesidad de reiniciar el Servicio ...

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_LiberarMem]
AS
BEGIN
EXEC sp_configure 'show advanced options', 1;
--GO
EXEC sys.sp_configure N'max server memory (MB)', N'1024'
--GO
RECONFIGURE WITH OVERRIDE
--GO
CHECKPOINT
--GO

WAITFOR DELAY '00:00:30'
EXEC sp_configure 'show advanced options', 1;
--GO
EXEC sys.sp_configure N'max server memory (MB)', N'8192'
--GO
RECONFIGURE WITH OVERRIDE
--GO
END

Para ejecutarlo:

EXECUTE [dbo].[usp_LiberarMem]