una duda

01/08/2003 - 13:39 por sonia | Informe spam
Estoy creando una aplicacion vb, esta llama a un stored
procedure. este estore en realidad ejecura el showcontig.
Los resultados del showcontig como sabreis no salen en una
tabla, sale en mensajes. Mi problema esta ahí. No se como
coger ese mensaje para poder leerlo desde visual basic.
Si me diesen una ayuda se lo agradeceria. estoy bloqueada,
y no puedo seguir para delante. Alguien me dijo metiendo
el mensaje en una variable de error, pero no se como
hacerlo, ni tampoc como coger esa variable desde vb.
Gracias. Saludos.
 

Leer las respuestas

#1 Miguel Egea
01/08/2003 - 13:46 | Informe spam
Sacado de los propios books on line


SET NOCOUNT ON
DECLARE @tablename VARCHAR (128)
DECLARE @execstr VARCHAR (255)
DECLARE @objectid INT
DECLARE @indexid INT
DECLARE @frag DECIMAL
DECLARE @maxfrag DECIMAL

SELECT @maxfrag = 30.0

DECLARE tables CURSOR FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'

CREATE TABLE #fraglist (
ObjectName CHAR (255),
ObjectId INT,
IndexName CHAR (255),
IndexId INT,
Lvl INT,
CountPages INT,
CountRows INT,
MinRecSize INT,
MaxRecSize INT,
AvgRecSize INT,
ForRecCount INT,
Extents INT,
ExtentSwitches INT,
AvgFreeBytes INT,
AvgPageDensity INT,
ScanDensity DECIMAL,
BestCount INT,
ActualCount INT,
LogicalFrag DECIMAL,
ExtentFrag DECIMAL)

OPEN tables

FETCH NEXT
FROM tables
INTO @tablename

WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO #fraglist
EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''')
WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')
FETCH NEXT
FROM tables
INTO @tablename
END

CLOSE tables
DEALLOCATE tables

DECLARE indexes CURSOR FOR
SELECT ObjectName, ObjectId, IndexId, LogicalFrag
FROM #fraglist
WHERE LogicalFrag >= @maxfrag
AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0

OPEN indexes

FETCH NEXT
FROM indexes
INTO @tablename, @objectid, @indexid, @frag

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',
' + RTRIM(@indexid) + ') - fragmentation currently '
+ RTRIM(CONVERT(varchar(15),@frag)) + '%'
SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ',
' + RTRIM(@indexid) + ')'
EXEC (@execstr)

FETCH NEXT
FROM indexes
INTO @tablename, @objectid, @indexid, @frag
END

CLOSE indexes
DEALLOCATE indexes

DROP TABLE #fraglist
GO


Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"sonia" escribió en el mensaje
news:105c01c35821$945f8980$
Estoy creando una aplicacion vb, esta llama a un stored
procedure. este estore en realidad ejecura el showcontig.
Los resultados del showcontig como sabreis no salen en una
tabla, sale en mensajes. Mi problema esta ahí. No se como
coger ese mensaje para poder leerlo desde visual basic.
Si me diesen una ayuda se lo agradeceria. estoy bloqueada,
y no puedo seguir para delante. Alguien me dijo metiendo
el mensaje en una variable de error, pero no se como
hacerlo, ni tampoc como coger esa variable desde vb.
Gracias. Saludos.

Preguntas similares