no funciona object_id

01/09/2003 - 10:36 por Felix Vela | Informe spam
Hola a todos!!!!
Tengo un problema, es el siguiente.
El problema esta en el object_id, es como que no me
detecta en que base de datos estoy. y no me devuelve
ningun resultado. si pongo la base de datos en la que
deberia de estar, me funciona, pero el problema esta
cuando la dejo en una cualquiera, es como que no cambia,
pero no me cambia cuando utilizo el object_id, si le pongo
cualquier otra condicion, si que me da el resultado que
seria el correcto.
Mi intento de solucion. Ponerlo en vez de como funcion,
sacarla fuera e intentar conseguir el resutlado fuera. lo
he intentado con
exec('use '+''+@nombres+''+' set '+''+@aux+''+'= object_id
('+''+@tablename+''+')'),

y tambien con

set @sql4 = N'use '+ @nombres+' select @aux=object_id
(@tablename)'
EXEC sp_executesql @sql3,
N'@tablename nvarchar(517),@aux int ',@tablename,@aux

Pero nada, no le puedo hacer que me devuelva el id de la
tablename.
Os paso tambien el codigo entero que me falla.
set @aux2=' DECLARE indices CURSOR FOR select i.name
from (sysindexes i inner join
sysfilegroups s on
i.groupid = s.groupid )
where id = object_id(@tablename) and
(i.indid=1 or i.indid=2) and i.indid < 255
and (i.OrigFillFactor > 0)'



set @sql3 = N'use '+ @nombres+' print db_name() '+
@aux2+' print db_name()'
EXEC sp_executesql @sql3,
N'@tablename nvarchar
(517),@h varchar(20) ',
@tablename,@h
open indices
FETCH NEXT
FROM indices
INTO @indexid
WHILE @@FETCH_STATUS=0
BEGIN

FETCH NEXT
FROM indices
INTO @indexid
end
close indices
deallocate indices
Muchas gracias por vuestra ayuda.
Saludos.

Preguntas similare

Leer las respuestas

#1 Liliana Sorrentino
01/09/2003 - 18:00 | Informe spam
Felix,
revisá por favor la respuesta que te mandé el 29/08.
Para tu código, las modificaciones serían:

/*COMIENZO DE CODIGO*/
declare @aux2 varchar(4000)
declare @sql3 nvarchar(4000)
declare @nombres varchar(50)
declare @tablename varchar(50)
declare @h varchar(40)
set @nombres='Tubase'
set @tablename='Tutabla'

set @aux2'DECLARE @indexid varchar(50)
'DECLARE @object_id char(50)
DECLARE indices CURSOR FOR SELECT i.name, object_id (@tablename)
FROM (sysindexes i INNER JOIN sysfilegroups s ON i.groupid = s.groupid )
WHERE id = object_id (@tablename) AND i.indid > 0 AND i.indid < 255
OPEN indices
FETCH NEXT FROM indices INTO @indexid, @object_id
WHILE @@FETCH_STATUS=0
BEGIN
SELECT ''el indexid primera parte es: '', @indexid, @object_id
FETCH NEXT FROM indices INTO @indexid, @object_id
END
CLOSE indices
DEALLOCATE indices'

print'ME METO POR EL PRIMERO, EL INDICE ES NULL '
SET @sql3 = N'use '+ @nombres+' print db_name() '+ @aux2+' print db_name()'
EXEC sp_executesql @sql3, N'@tablename nvarchar (517),@h varchar(20) ',
@tablename,@h
print 'llego aqui'

Saludos... Liliana.

"Felix Vela" escribió en el mensaje
news:05f801c37064$16db7ef0$
Hola a todos!!!!
Tengo un problema, es el siguiente.
El problema esta en el object_id, es como que no me
detecta en que base de datos estoy. y no me devuelve
ningun resultado. si pongo la base de datos en la que
deberia de estar, me funciona, pero el problema esta
cuando la dejo en una cualquiera, es como que no cambia,
pero no me cambia cuando utilizo el object_id, si le pongo
cualquier otra condicion, si que me da el resultado que
seria el correcto.
Mi intento de solucion. Ponerlo en vez de como funcion,
sacarla fuera e intentar conseguir el resutlado fuera. lo
he intentado con
exec('use '+''+@nombres+''+' set '+''+@aux+''+'= object_id
('+''+@tablename+''+')'),

y tambien con

set @sql4 = N'use '+ @nombres+' select @aux=object_id
(@tablename)'
EXEC sp_executesql @sql3,
N'@tablename nvarchar(517),@aux int ',@tablename,@aux

Pero nada, no le puedo hacer que me devuelva el id de la
tablename.
Os paso tambien el codigo entero que me falla.
set @aux2=' DECLARE indices CURSOR FOR select i.name
from (sysindexes i inner join
sysfilegroups s on
i.groupid = s.groupid )
where id = object_id(@tablename) and
(i.indid=1 or i.indid=2) and i.indid < 255
and (i.OrigFillFactor > 0)'



set @sql3 = N'use '+ @nombres+' print db_name() '+
@aux2+' print db_name()'
EXEC sp_executesql @sql3,
N'@tablename nvarchar
(517),@h varchar(20) ',
@tablename,@h
open indices
FETCH NEXT
FROM indices
INTO @indexid
WHILE @@FETCH_STATUS=0
BEGIN

FETCH NEXT
FROM indices
INTO @indexid
end
close indices
deallocate indices
Muchas gracias por vuestra ayuda.
Saludos.
Respuesta Responder a este mensaje
#2 Liliana Sorrentino
01/09/2003 - 18:11 | Informe spam
Para eliminar el uso de cursores, podrías probar algo como esto:

/*COMIENZO DE CODIGO*/
declare @aux2 varchar(4000)
declare @sql3 nvarchar(4000)
declare @nombres varchar(50)
declare @tablename varchar(50)
declare @h varchar(40)
set @nombres='Tubase'
set @tablename='Tutabla'

set @aux2'SELECT NombreTabla = substring(o.name,1,30),
NombreIndice = substring(i.name,1,30),
Object_id = object_id(o.name)
FROM sysobjects o
LEFT JOIN sysindexes i ON o.id = i.id AND i.indid > 1
WHERE o.name = @tablename'
print'ME METO POR EL PRIMERO, EL INDICE ES NULL '
set @sql3 = N'use '+ @nombres+' print db_name() '+ @aux2+' print db_name()'
EXEC sp_executesql @sql3, N'@tablename nvarchar (517),@h varchar(20) ',
@tablename,@h
print 'llego aqui'

"Felix Vela" escribió en el mensaje
news:05f801c37064$16db7ef0$
Hola a todos!!!!
Tengo un problema, es el siguiente.
El problema esta en el object_id, es como que no me
detecta en que base de datos estoy. y no me devuelve
ningun resultado. si pongo la base de datos en la que
deberia de estar, me funciona, pero el problema esta
cuando la dejo en una cualquiera, es como que no cambia,
pero no me cambia cuando utilizo el object_id, si le pongo
cualquier otra condicion, si que me da el resultado que
seria el correcto.
Mi intento de solucion. Ponerlo en vez de como funcion,
sacarla fuera e intentar conseguir el resutlado fuera. lo
he intentado con
exec('use '+''+@nombres+''+' set '+''+@aux+''+'= object_id
('+''+@tablename+''+')'),

y tambien con

set @sql4 = N'use '+ @nombres+' select @aux=object_id
(@tablename)'
EXEC sp_executesql @sql3,
N'@tablename nvarchar(517),@aux int ',@tablename,@aux

Pero nada, no le puedo hacer que me devuelva el id de la
tablename.
Os paso tambien el codigo entero que me falla.
set @aux2=' DECLARE indices CURSOR FOR select i.name
from (sysindexes i inner join
sysfilegroups s on
i.groupid = s.groupid )
where id = object_id(@tablename) and
(i.indid=1 or i.indid=2) and i.indid < 255
and (i.OrigFillFactor > 0)'



set @sql3 = N'use '+ @nombres+' print db_name() '+
@aux2+' print db_name()'
EXEC sp_executesql @sql3,
N'@tablename nvarchar
(517),@h varchar(20) ',
@tablename,@h
open indices
FETCH NEXT
FROM indices
INTO @indexid
WHILE @@FETCH_STATUS=0
BEGIN

FETCH NEXT
FROM indices
INTO @indexid
end
close indices
deallocate indices
Muchas gracias por vuestra ayuda.
Saludos.
Respuesta Responder a este mensaje
#3 Felix Vela
02/09/2003 - 08:02 | Informe spam
Muchas gracias liliana. Me parece qeu me ha salido de otra
forma mas simple. Cuando busco los indices hago que se
ordenen desc por el indid, esto me permite coger el de
id=1, que ademas sera por lo que he podido observar, el
que defragmenta todos. asi que problema solucionado (me
parece). tengo que hacer unas pruebas mas a ve si estoy en
lo cierto o no. porque todo esto son suposiciones mias.
Mil Gracias por tus respuestas. Saludos.
Félix Vela.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida