¿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.
miércoles, 28 de marzo de 2012
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.
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
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
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]
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]
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]
Suscribirse a:
Entradas (Atom)