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.
 

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.

Preguntas similares