Saber tamaño más grande de registro

16/02/2007 - 19:00 por Rebeca Abella | Informe spam
Hola a todos,

Como puedo saber el tamaño del registro de mayor longitud de una tabla? Es
decir, necesito saber el registro que tiene más caracteres de campos char.
varchar, text.. de na tabla.

Muchas gracias de antemano.

Un saludo

Rebeca.

Preguntas similare

Leer las respuestas

#6 Rebeca Abella
16/02/2007 - 21:00 | Informe spam
Muchas gracias por tu interes Alejandro, te agradecería me dijeras la
solucion, ya que necesito averiguar que tamaña tiene el registro mas grande
de varias tablas de una BBDD para luego ajustar ese tamaña máximo en el
diseñ de una serie de formularios desarrollados en V.B.

Saludos

Rebeca

"Alejandro Mesa" escribió en el
mensaje news:
Rebeca,

Se me paso decir, que en la version 2000 el indid = 255 es para tablas con
columna tipo text. Tambien que el resultado para campos tipo text no
incluye
multiples columnas tipo text en una misma tabla.

Estuve haciendo pruebas en la version 2005 y el resultado del comando
"dbcc
showcontig" no ayuda mucho.

Vere si puedo encontrar alguna solucion para esta pregunta, sin tener que
sumar todos los bytes de todas las columnas y de ahi sacar el mayor.


AMB

"Alejandro Mesa" wrote:

Rebeca,

Ve si la informacion que retorna el comando "dbcc checkcontig" te es
util.
en el resultado tienes "MinimumRecordSize" y "MaximumRecordSize". Chequea
esos valores para los indices 0 o 1, en el nivel 0. Cuidado de ejecutar
este
comando en produccion durante horas pico.

Ejemplo:

use northwind
go

dbcc showcontig ('dbo.orders') with all_indexes, tableresults
go


AMB


"Rebeca Abella" wrote:

> Hola a todos,
>
> Como puedo saber el tamaño del registro de mayor longitud de una tabla?
> Es
> decir, necesito saber el registro que tiene más caracteres de campos
> char.
> varchar, text.. de na tabla.
>
> Muchas gracias de antemano.
>
> Un saludo
>
> Rebeca.
>
>
>
Respuesta Responder a este mensaje
#7 Alejandro Mesa
16/02/2007 - 21:00 | Informe spam
Rebeca,

Por ahora tendremos que acojernos a la suma del resultado de la funcion
DATALENGTH de cada columna y seleccionar el max. Para eso debemos generar una
cadena dinamica que incluya el nombre de todas las columnas de la tabla. En
la version 2005 tenemos un truquito para elavorar la concatenacion, pero en
la version 2000 tendras que tener mas cuidado ya que la cadena dinamica es de
4000 bytes, asi que si tenemos muchas columnas, puede que el resultado final
no quepa en una sola variable.

declare @s nvarchar(4000)
declare @i int

set @s = N''

select
@s = @s + N'+datalength([' + column_name + N'])'
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 'orders'

set @s = N'select @i = max(' + stuff(@s, 1, 1, '') + N') from dbo.orders'

exec sp_executesql @s, N'@i int output', @i output

print @i
go

use northwind
go

declare @s nvarchar(max)
declare @i int

select
@s = 'select @i = max(' + stuff(c, 1, 1, '') + ') from dbo.orders'
from
(
select
'+datalength([' + column_name + '])'
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 'orders'
for xml path('')
) as t(c)

exec sp_executesql @s, N'@i int output', @i output

print @i
go


Te adjunto un articulo sobre como concatenar los valores de columnas y
puedes adaptar el codigo de acuerdo a tus necesidades. Ojo, que el metodo que
escoji para 2000 no lo consideran confiable, pero puedes optar por algun otro
metodo de los que en el articulo se exponen.

Concatenating row values in Transact-SQL
http://www.projectdmx.com/tsql/rowconcatenate.aspx


AMB


"Alejandro Mesa" wrote:

Rebeca,

Se me paso decir, que en la version 2000 el indid = 255 es para tablas con
columna tipo text. Tambien que el resultado para campos tipo text no incluye
multiples columnas tipo text en una misma tabla.

Estuve haciendo pruebas en la version 2005 y el resultado del comando "dbcc
showcontig" no ayuda mucho.

Vere si puedo encontrar alguna solucion para esta pregunta, sin tener que
sumar todos los bytes de todas las columnas y de ahi sacar el mayor.


AMB

"Alejandro Mesa" wrote:

> Rebeca,
>
> Ve si la informacion que retorna el comando "dbcc checkcontig" te es util.
> en el resultado tienes "MinimumRecordSize" y "MaximumRecordSize". Chequea
> esos valores para los indices 0 o 1, en el nivel 0. Cuidado de ejecutar este
> comando en produccion durante horas pico.
>
> Ejemplo:
>
> use northwind
> go
>
> dbcc showcontig ('dbo.orders') with all_indexes, tableresults
> go
>
>
> AMB
>
>
> "Rebeca Abella" wrote:
>
> > Hola a todos,
> >
> > Como puedo saber el tamaño del registro de mayor longitud de una tabla? Es
> > decir, necesito saber el registro que tiene más caracteres de campos char.
> > varchar, text.. de na tabla.
> >
> > Muchas gracias de antemano.
> >
> > Un saludo
> >
> > Rebeca.
> >
> >
> >
Respuesta Responder a este mensaje
#8 Alejandro Mesa
16/02/2007 - 21:08 | Informe spam
Corrección:

Cuando las columnas son nchar/nvarchar/ntext debemos dividir por dos el
resultado de la funcion DATALENGTH porque los tipos unicodes usan dos bytes
por caracter.

declare @s nvarchar(max)
declare @i int

select
@s = 'select @i = max(' + stuff(c, 1, 1, '') + ') from dbo.t1'
from
(
select
'+datalength([' + column_name + ']) /' + case when data_type in ('nchar',
'nvarchar', 'ntext') then N'2' else N'1' end
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
for xml path('')
) as t(c)

exec sp_executesql @s, N'@i int output', @i output

print @i
go

declare @s nvarchar(4000)
declare @i int

set @s = N''

select
@s = @s + N'+datalength([' + column_name + N'])/' + case when data_type in
('nchar', 'nvarchar', 'ntext') then N'2' else N'1' end
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'

set @s = N'select @i = max(' + stuff(@s, 1, 1, '') + N') from dbo.t1'

exec sp_executesql @s, N'@i int output', @i output

print @i
go


AMB


"Alejandro Mesa" wrote:

Rebeca,

Por ahora tendremos que acojernos a la suma del resultado de la funcion
DATALENGTH de cada columna y seleccionar el max. Para eso debemos generar una
cadena dinamica que incluya el nombre de todas las columnas de la tabla. En
la version 2005 tenemos un truquito para elavorar la concatenacion, pero en
la version 2000 tendras que tener mas cuidado ya que la cadena dinamica es de
4000 bytes, asi que si tenemos muchas columnas, puede que el resultado final
no quepa en una sola variable.

declare @s nvarchar(4000)
declare @i int

set @s = N''

select
@s = @s + N'+datalength([' + column_name + N'])'
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 'orders'

set @s = N'select @i = max(' + stuff(@s, 1, 1, '') + N') from dbo.orders'

exec sp_executesql @s, N'@i int output', @i output

print @i
go

use northwind
go

declare @s nvarchar(max)
declare @i int

select
@s = 'select @i = max(' + stuff(c, 1, 1, '') + ') from dbo.orders'
from
(
select
'+datalength([' + column_name + '])'
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 'orders'
for xml path('')
) as t(c)

exec sp_executesql @s, N'@i int output', @i output

print @i
go


Te adjunto un articulo sobre como concatenar los valores de columnas y
puedes adaptar el codigo de acuerdo a tus necesidades. Ojo, que el metodo que
escoji para 2000 no lo consideran confiable, pero puedes optar por algun otro
metodo de los que en el articulo se exponen.

Concatenating row values in Transact-SQL
http://www.projectdmx.com/tsql/rowconcatenate.aspx


AMB


"Alejandro Mesa" wrote:

> Rebeca,
>
> Se me paso decir, que en la version 2000 el indid = 255 es para tablas con
> columna tipo text. Tambien que el resultado para campos tipo text no incluye
> multiples columnas tipo text en una misma tabla.
>
> Estuve haciendo pruebas en la version 2005 y el resultado del comando "dbcc
> showcontig" no ayuda mucho.
>
> Vere si puedo encontrar alguna solucion para esta pregunta, sin tener que
> sumar todos los bytes de todas las columnas y de ahi sacar el mayor.
>
>
> AMB
>
> "Alejandro Mesa" wrote:
>
> > Rebeca,
> >
> > Ve si la informacion que retorna el comando "dbcc checkcontig" te es util.
> > en el resultado tienes "MinimumRecordSize" y "MaximumRecordSize". Chequea
> > esos valores para los indices 0 o 1, en el nivel 0. Cuidado de ejecutar este
> > comando en produccion durante horas pico.
> >
> > Ejemplo:
> >
> > use northwind
> > go
> >
> > dbcc showcontig ('dbo.orders') with all_indexes, tableresults
> > go
> >
> >
> > AMB
> >
> >
> > "Rebeca Abella" wrote:
> >
> > > Hola a todos,
> > >
> > > Como puedo saber el tamaño del registro de mayor longitud de una tabla? Es
> > > decir, necesito saber el registro que tiene más caracteres de campos char.
> > > varchar, text.. de na tabla.
> > >
> > > Muchas gracias de antemano.
> > >
> > > Un saludo
> > >
> > > Rebeca.
> > >
> > >
> > >
Respuesta Responder a este mensaje
#9 Alejandro Mesa
16/02/2007 - 21:09 | Informe spam
Rebeca,

Asegurate de leer la corrección.


AMB


"Rebeca Abella" wrote:

Muchas gracias por tu interes Alejandro, te agradecería me dijeras la
solucion, ya que necesito averiguar que tamaña tiene el registro mas grande
de varias tablas de una BBDD para luego ajustar ese tamaña máximo en el
diseñ de una serie de formularios desarrollados en V.B.

Saludos

Rebeca

"Alejandro Mesa" escribió en el
mensaje news:
> Rebeca,
>
> Se me paso decir, que en la version 2000 el indid = 255 es para tablas con
> columna tipo text. Tambien que el resultado para campos tipo text no
> incluye
> multiples columnas tipo text en una misma tabla.
>
> Estuve haciendo pruebas en la version 2005 y el resultado del comando
> "dbcc
> showcontig" no ayuda mucho.
>
> Vere si puedo encontrar alguna solucion para esta pregunta, sin tener que
> sumar todos los bytes de todas las columnas y de ahi sacar el mayor.
>
>
> AMB
>
> "Alejandro Mesa" wrote:
>
>> Rebeca,
>>
>> Ve si la informacion que retorna el comando "dbcc checkcontig" te es
>> util.
>> en el resultado tienes "MinimumRecordSize" y "MaximumRecordSize". Chequea
>> esos valores para los indices 0 o 1, en el nivel 0. Cuidado de ejecutar
>> este
>> comando en produccion durante horas pico.
>>
>> Ejemplo:
>>
>> use northwind
>> go
>>
>> dbcc showcontig ('dbo.orders') with all_indexes, tableresults
>> go
>>
>>
>> AMB
>>
>>
>> "Rebeca Abella" wrote:
>>
>> > Hola a todos,
>> >
>> > Como puedo saber el tamaño del registro de mayor longitud de una tabla?
>> > Es
>> > decir, necesito saber el registro que tiene más caracteres de campos
>> > char.
>> > varchar, text.. de na tabla.
>> >
>> > Muchas gracias de antemano.
>> >
>> > Un saludo
>> >
>> > Rebeca.
>> >
>> >
>> >



Respuesta Responder a este mensaje
#10 Rebeca Abella
17/02/2007 - 12:37 | Informe spam
Muchas gracias Alejandro, has sido muy amable.

Un saludo

Rebeca

"Alejandro Mesa" escribió en el
mensaje news:
Corrección:

Cuando las columnas son nchar/nvarchar/ntext debemos dividir por dos el
resultado de la funcion DATALENGTH porque los tipos unicodes usan dos
bytes
por caracter.

declare @s nvarchar(max)
declare @i int

select
@s = 'select @i = max(' + stuff(c, 1, 1, '') + ') from dbo.t1'
from
(
select
'+datalength([' + column_name + ']) /' + case when data_type in ('nchar',
'nvarchar', 'ntext') then N'2' else N'1' end
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
for xml path('')
) as t(c)

exec sp_executesql @s, N'@i int output', @i output

print @i
go

declare @s nvarchar(4000)
declare @i int

set @s = N''

select
@s = @s + N'+datalength([' + column_name + N'])/' + case when data_type in
('nchar', 'nvarchar', 'ntext') then N'2' else N'1' end
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'

set @s = N'select @i = max(' + stuff(@s, 1, 1, '') + N') from dbo.t1'

exec sp_executesql @s, N'@i int output', @i output

print @i
go


AMB


"Alejandro Mesa" wrote:

Rebeca,

Por ahora tendremos que acojernos a la suma del resultado de la funcion
DATALENGTH de cada columna y seleccionar el max. Para eso debemos generar
una
cadena dinamica que incluya el nombre de todas las columnas de la tabla.
En
la version 2005 tenemos un truquito para elavorar la concatenacion, pero
en
la version 2000 tendras que tener mas cuidado ya que la cadena dinamica
es de
4000 bytes, asi que si tenemos muchas columnas, puede que el resultado
final
no quepa en una sola variable.

declare @s nvarchar(4000)
declare @i int

set @s = N''

select
@s = @s + N'+datalength([' + column_name + N'])'
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 'orders'

set @s = N'select @i = max(' + stuff(@s, 1, 1, '') + N') from dbo.orders'

exec sp_executesql @s, N'@i int output', @i output

print @i
go

use northwind
go

declare @s nvarchar(max)
declare @i int

select
@s = 'select @i = max(' + stuff(c, 1, 1, '') + ') from dbo.orders'
from
(
select
'+datalength([' + column_name + '])'
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 'orders'
for xml path('')
) as t(c)

exec sp_executesql @s, N'@i int output', @i output

print @i
go


Te adjunto un articulo sobre como concatenar los valores de columnas y
puedes adaptar el codigo de acuerdo a tus necesidades. Ojo, que el metodo
que
escoji para 2000 no lo consideran confiable, pero puedes optar por algun
otro
metodo de los que en el articulo se exponen.

Concatenating row values in Transact-SQL
http://www.projectdmx.com/tsql/rowconcatenate.aspx


AMB


"Alejandro Mesa" wrote:

> Rebeca,
>
> Se me paso decir, que en la version 2000 el indid = 255 es para tablas
> con
> columna tipo text. Tambien que el resultado para campos tipo text no
> incluye
> multiples columnas tipo text en una misma tabla.
>
> Estuve haciendo pruebas en la version 2005 y el resultado del comando
> "dbcc
> showcontig" no ayuda mucho.
>
> Vere si puedo encontrar alguna solucion para esta pregunta, sin tener
> que
> sumar todos los bytes de todas las columnas y de ahi sacar el mayor.
>
>
> AMB
>
> "Alejandro Mesa" wrote:
>
> > Rebeca,
> >
> > Ve si la informacion que retorna el comando "dbcc checkcontig" te es
> > util.
> > en el resultado tienes "MinimumRecordSize" y "MaximumRecordSize".
> > Chequea
> > esos valores para los indices 0 o 1, en el nivel 0. Cuidado de
> > ejecutar este
> > comando en produccion durante horas pico.
> >
> > Ejemplo:
> >
> > use northwind
> > go
> >
> > dbcc showcontig ('dbo.orders') with all_indexes, tableresults
> > go
> >
> >
> > AMB
> >
> >
> > "Rebeca Abella" wrote:
> >
> > > Hola a todos,
> > >
> > > Como puedo saber el tamaño del registro de mayor longitud de una
> > > tabla? Es
> > > decir, necesito saber el registro que tiene más caracteres de
> > > campos char.
> > > varchar, text.. de na tabla.
> > >
> > > Muchas gracias de antemano.
> > >
> > > Un saludo
> > >
> > > Rebeca.
> > >
> > >
> > >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida