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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 sonia
01/08/2003 - 14:13 | Informe spam
si me funciona esto se solucionaria todo mi problema, el
caso es que no me funciona. me pone
'FAST' is not a recognized option.
Tengo sql server 7.0 , he quitado todas las opciones que
tiene yh me sale otro error.
Parameter 1 is incorrect for this DBCC statement.
no me tira. el parametro 1 es correcto, de hecho solo le
dejo con ese, que de normal me funciona.
No se que le fallará, alguna idea?
Gracias, saludos.

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.


.

Respuesta Responder a este mensaje
#3 Miguel Egea
01/08/2003 - 14:25 | Informe spam
Hola, revisa en los books on line de la 7.0 seguramente vendrá el mismo
procedimiento pero para 7.0. Si no te funciona dimelo y con gusto escribo un
artículo para portalsql.com sobre como hacerlo. El tema no es la clausula
FAST, que da igual realmente ,lo importante es la opción TABLERESULT, que no
sé si estaba en 7.0

Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"sonia" escribió en el mensaje
news:0a6401c35826$4d96b5f0$
si me funciona esto se solucionaria todo mi problema, el
caso es que no me funciona. me pone
'FAST' is not a recognized option.
Tengo sql server 7.0 , he quitado todas las opciones que
tiene yh me sale otro error.
Parameter 1 is incorrect for this DBCC statement.
no me tira. el parametro 1 es correcto, de hecho solo le
dejo con ese, que de normal me funciona.
No se que le fallará, alguna idea?
Gracias, saludos.

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.


.

Respuesta Responder a este mensaje
#4 sonia
01/08/2003 - 14:34 | Informe spam
Muchisimas gracias, voy a mirar el book de 7.0, lo buscare
por microsoft, que soy tan lista que tengo el de sql
server 2000 ;). Ya te comentare si me ha salido, y me paso
por el portal que me has comentado. Gracias. Saludos.
Como salga asi me ahorro un gran trabajo.
Hola, revisa en los books on line de la 7.0 seguramente


vendrá el mismo
procedimiento pero para 7.0. Si no te funciona dimelo y


con gusto escribo un
artículo para portalsql.com sobre como hacerlo. El tema


no es la clausula
FAST, que da igual realmente ,lo importante es la opción


TABLERESULT, que no
sé si estaba en 7.0

Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"sonia" escribió en el mensaje
news:0a6401c35826$4d96b5f0$
si me funciona esto se solucionaria todo mi problema, el
caso es que no me funciona. me pone
'FAST' is not a recognized option.
Tengo sql server 7.0 , he quitado todas las opciones que
tiene yh me sale otro error.
Parameter 1 is incorrect for this DBCC statement.
no me tira. el parametro 1 es correcto, de hecho solo le
dejo con ese, que de normal me funciona.
No se que le fallará, alguna idea?
Gracias, saludos.

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.


.





.

Respuesta Responder a este mensaje
#5 Emilio Boucau
01/08/2003 - 15:15 | Informe spam
Nop, eso no esta en el 7.0 ...

Saludos !

Emilio Boucau
Microsoft MVP SQL Server
http://www.portalsql.com
PASS Spanish Group
http://www.sqlpass.org

Buenos Aires - Argentina
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida