Nombre de Tabla

03/03/2005 - 00:47 por Diego, Romero | Informe spam
Hola
Como estan ?

¿ Por qué si no se puede crear dos tablas con el mismo nombre en una base
de datos y si tengo
que hacer referencia a esa tabla en un SP de otra base de datos, se obliga
a colocar el nombre del propietario ?

Ejemplo: dbventas.dbo.nombretabla
¿Por qué no se puede : dbventas.nombretabla ?

gracias

Diego

Preguntas similare

Leer las respuestas

#1 Jorge Bustos
03/03/2005 - 01:45 | Informe spam
Te aclaro varios puntos.

1) Puedes utilizar dbventas..nombretabla si quieres ahorrarte escribir el
nombre del propietario. (Observa que hay dos punto seguidos .. )

2) Podrías tener dos tablas en la misma bd con el mismo nombre, si el
propietario es distinto. Por ejemplo,

create table dbo.a (n int)
create table manolo.a (n int)

La segunda tabla solo se crea si existe el usuario manolo en esta base de
datos, y si quien quiere crearla tiene permiso para ello (en principio el
usuario manolo y sa).

Cuando manolo realiza
create table a
por defecto estará creando manolo.a

Si lo hace el usuario sa estará creando dbo.a (por convención, en vez de
llamarse sa.a se llama dbo.a... es decir, los objetos cuyo dueño es sa se
prefijan con dbo en vez de con sa).

3) Los objetos de la base de datos se buscan por este orden:
- primero los correspondientes al usuario actual
- si no existen, se buscan los de dbo

Por ejemplo, si el usuario manolo ejecuta:
select * from a
se le devolverán las filas de manolo.a
Y si es cualquier otro usuario se le devolverán las filas de dbo.a

4) Los nombrs completos de objetos de base de datos son:
servidor.bd.propietario.objeto

Si se omite el propietario ya te he comentado como se resuelve
Si se omite el servidor se usa el actual
Si se omite el nombre de bd se usa la actual (la que se haya seleccionado
con USE o la que corresponda al usuario por defecto si no se emplea USE)

En SQL Server 2005, por temas asociados a los permisos de usuario, la
utilización del propietario tomará importancia en muchos casos para
simplificar la gestión de la seguridad de la base de datos, cuando esta sea
compleja.

Por el momento mi consejo es que siempre crees las tablas como
pertenecientes a dbo.

Salu2,
Jorge.

"Diego, Romero" wrote in message
news:
Hola
Como estan ?

¿ Por qué si no se puede crear dos tablas con el mismo nombre en una base
de datos y si tengo
que hacer referencia a esa tabla en un SP de otra base de datos, se


obliga
a colocar el nombre del propietario ?

Ejemplo: dbventas.dbo.nombretabla
¿Por qué no se puede : dbventas.nombretabla ?

gracias

Diego


Respuesta Responder a este mensaje
#2 Maxi
03/03/2005 - 21:28 | Informe spam
Hola, no se puede porque por sintaxis debes poner el nombre del propietario,
ya que pueden existir tablas de igual nombre distinto propietario (nada
recomendado pero..)


Salu2
Maxi


"Diego, Romero" escribió en el mensaje
news:
Hola
Como estan ?

¿ Por qué si no se puede crear dos tablas con el mismo nombre en una base
de datos y si tengo
que hacer referencia a esa tabla en un SP de otra base de datos, se
obliga
a colocar el nombre del propietario ?

Ejemplo: dbventas.dbo.nombretabla
¿Por qué no se puede : dbventas.nombretabla ?

gracias

Diego


Respuesta Responder a este mensaje
#3 Jorge Bustos
03/03/2005 - 22:42 | Informe spam
Maxi, disculpa, no es por entrar en polémica, pero no sé si me pierdo
algo... No sé si has leído mi respuesta en este hilo (y si te percatarás de
este mensaje dirigido a ti). A parte de lo que menciono en él, también acabo
de crear un procedimiento almacenado con esta sintaxis, sobre mi base de
datos de pruebas "test":

create procedure pqr
as
select * from test..a

Y no tengo ningún error al crearlo ni problema al ejecutarlo.

En lo que sí estoy plenamente de acuerdo es en el jaleo que se forma al no
especificar el propietario. Por ejemplo es "casi impredecible" (me refiero
para alguien que revise el código) saber si la ejecución por manolo o por
dbo de este procedimiento van a dar o no el mismo resultado.

Saludos,
Jorge
Respuesta Responder a este mensaje
#4 Maxi
04/03/2005 - 13:07 | Informe spam
Hola, si lo he leido, el tema es que no entiendo este mensaje a que esta
referido o sea: es correcto que no es necesario escribir toda la sintaxis
para referenciar a un objeto, pero tambien es cierto que lo mas prolijo
seria hacerlo y ademas si trabajas con bdd separadas o servidores
independientes no vas a tener otro remedio


Salu2
Maxi


"Jorge Bustos" escribió en el mensaje
news:%
Maxi, disculpa, no es por entrar en polémica, pero no sé si me pierdo
algo... No sé si has leído mi respuesta en este hilo (y si te percatarás
de
este mensaje dirigido a ti). A parte de lo que menciono en él, también
acabo
de crear un procedimiento almacenado con esta sintaxis, sobre mi base de
datos de pruebas "test":

create procedure pqr
as
select * from test..a

Y no tengo ningún error al crearlo ni problema al ejecutarlo.

En lo que sí estoy plenamente de acuerdo es en el jaleo que se forma al no
especificar el propietario. Por ejemplo es "casi impredecible" (me refiero
para alguien que revise el código) saber si la ejecución por manolo o por
dbo de este procedimiento van a dar o no el mismo resultado.

Saludos,
Jorge



Respuesta Responder a este mensaje
#5 Jorge Bustos
04/03/2005 - 16:35 | Informe spam
Supongo que es un tema algo confuso, lo que se puede, lo que no se puede, lo
que se debe, lo que no se debe... En fin, es lo mismo. A veces la cantidad
de modos posibles de hacer una cosa es abrumante, y lo más recomendable es
respetar siempre los mismos criterios, y si son sencillos mejor.

Salu2,
Jorge
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida