2010-09-27 22 views
26

Tengo un esquema definido en mi base de datos. Excepto que ahora cada vez que hago una declaración sql tengo que proporcionar el esquema ... SELECT * FROM [myschema].tableEsquema del servidor SQL y esquema predeterminado

puse el esquema predeterminado para mi usuario mediante el estudio de gestión y también funcionó la ALTER USER myUser WITH DEFAULT_SCHEMA [myschema] y aún así obtener la 'tabla de objeto no válido 'al escribir una consulta sin el esquema (SELECCIONAR * tabla FROM)

¿Hay alguna manera de escribir SELECT * FROM table sin tener que especificar el nombre del esquema todo el tiempo?

Está en SQL 2005 utilizando SQL Management Studio.

+0

¿Está emitiendo la consulta SQL desde algún código (Java, .Net) o SQL Manager? –

+0

Desde el estudio de administración sql ... – pdiddy

Respuesta

43

es el usuario de un SA, de ser así no va a funcionar, de acuerdo con los documentationSA usuarios son siempre de forma predeterminada con el esquema dbo.

El valor de DEFAULT_SCHEMA se ignora si el usuario es un miembro de la función fija de servidor administrador de sistemas. Todos los miembros de la función de servidor fijo sysadmin tienen un esquema predeterminado de dbo.

+0

En roles de servidor, estoy en público y el rol del servidor sysadmin no está marcado ... – pdiddy

+2

Ejecute estos 'SELECT SUSER_NAME()' y 'SELECT USER_NAME()' y dígame su salida. –

+0

el primero es mi usuario y el segundo es dbo .... – pdiddy

4

par de opciones:

  1. ¿Su usuario mencionado en Seguridad> Usuarios (en SSMS)? Compruebe Propiedades (haga clic con el botón derecho en el nombre) y vea si El esquema predeterminado se establece en el contexto de la base de datos, en lugar de la instancia (que es lo que ALTER USER está configurando).
  2. Create a synonym para la tabla que desea hacer referencia:

    CREATE SYNONYM table_name 
        FOR [your_db].[your_schema].table_name 
    

    ... lo que afectará a todos los que no utiliza al menos dos notación nombre, en el contexto de esa base de datos. Read more about it here. Pero está asociado en última instancia a un esquema.

  3. Compruebe que la base de datos seleccionada en el menú desplegable "Bases de datos disponibles" (arriba a la izquierda, a la izquierda del botón Ejecutar) es correcta.

  4. uso de tres nombre de notación cuando se especifica la tabla (y ver) referencias:

    SELECT * 
        FROM [your_db].[your_schema].table_name 
    
+0

Mi pregunta era si era posible evitar la notación del nombre a través de alguna configuración en SSMS .... Me gustaría no incluir el esquema completo de DB en mi consulta, ya que puede ser largo . Las bases de datos disponibles se seleccionan correctamente. – pdiddy

+0

@pdiddy: agregué que un sinónimo es otra consideración. Lo siento, me perdí que no quisiste usar la notación de nombres. –

+0

para la opción 1, ¿cómo verifico el contexto ...? – pdiddy

3

Si no desea utilizar los nombres de SQL "completos calificados", entonces usted necesita para evitar la creación de las tablas usando cualquier cuenta o rol que no esté usando el esquema predeterminado "dbo" asignado. ¿Por qué necesita cambiar el esquema predeterminado en el usuario si no planea usarlo?

+0

¿Por qué debería usar nombres SQL "completos"? Por ejemplo, quiere almacenar algunos datos de usuario en la base de datos. Y puede haber MUCHOS usuarios que usan el mismo programa. Por esquema, puede tener su propia tabla creada. En nuestros programas esto va de la misma manera. ¡Lo único importante es el esquema predeterminado de trabajo! – Jettero

Cuestiones relacionadas