2011-02-09 15 views
42

¿Hay alguna forma de establecer el esquema para una consulta para que en el resto de la consulta pueda referirme a las tablas solo por su nombre sin anteponerlas con un nombre de esquema?establecer el esquema predeterminado para una consulta sql

Por ejemplo, me gustaría hacer algo como esto:

Use [schemaName] 
select * from [tableName] 

en contraposición a esto:

select * from [schemaName].[tableName] 
+1

Señale su nombre de base de datos y seleccione una nueva consulta en SQLMS. Use DBNAME; Seleccionar * de [Nombre de tabla] es correcto. – Crimsonland

Respuesta

30

Un google rápido me indicó this page. Explica que desde SQL server 2005 en adelante puede establecer el esquema predeterminado de un usuario con la instrucción ALTER USER. Desafortunadamente, eso significa que lo cambia permanentemente, por lo que si necesita cambiar entre esquemas, deberá configurarlo cada vez que ejecute un procedimiento almacenado o un lote de instrucciones. Alternativamente, puede usar la técnica que se describe en here.

Si está utilizando sql server 2000 o anterior this page explica que los usuarios y esquemas son equivalentes. Si no antepone su nombre de tabla con un esquema \ usuario, el servidor sql primero verá las tablas propiedad del usuario actual y las que posee el dbo para resolver el nombre de la tabla. Parece que para todas las demás tablas debe anteponer el esquema \ usuario.

+0

Esto es lo que estaba buscando. Gracias. – Chev

+0

Esto me llevó a la respuesta que necesitaba. Resulta que el esquema predeterminado se ignora si el usuario es miembro de la función de servidor fijo SysAdmin. Simplemente usa dbo ... – ShaneBlake

11

No creo que hay una manera "por consulta" para hacer esto . (Puede utilizar la palabra clave use para especificar la base de datos - no el esquema - pero eso es técnicamente una consulta independiente como usted tiene que emitir el comando go después.)

Recuerde, en el servidor SQL totalmente nombres de tabla cualificados están en el formato:..

[base de datos] [esquema] [tabla]

En SQL Server Management Studio se pueden configurar todos los valores predeterminados que estés preguntando por.

  • Puede configurar el valor por defecto database sobre una base por usuario (o en su cadena de conexión):

    Seguridad> Conexiones> (clic derecho) de usuario> Propiedades> General

  • Puede configurar el valor predeterminado schema por usuario (pero no creo que pueda configurarlo en su cadena de conexión, aunque si usa dbo que siempre es el predeterminado):

    Seguridad> Conexiones> (clic derecho) de usuario> Propiedades> Asignación de usuarios> predeterminado esquema

En resumen, si se utiliza dbo para su esquema, es probable que tenga la menor cantidad de dolores de cabeza

0

Otra forma de añadir dinámicamente esquema o si quieres cambiar a otra cosa

DECLARE @schema AS VARCHAR(256) = 'dbo.' 
--User can also use SELECT SCHEMA_NAME() to get the default schema name 


DECLARE @ID INT 

declare @SQL nvarchar(max) = 'EXEC ' + @schema +'spSelectCaseBookingDetails @BookingID = ' + CAST(@ID AS NVARCHAR(10)) 

No hay necesidad de emitir @ID si es de tipo nvarchar o varchar

ejecutar (@SQL)

1

Lo que a veces hago cuando necesito muchos nombres de tablas solo los obtengo más su esquema de la tabla del sistema INFORMATION_SCHEMA: valor


select TABLE_SCHEMA + '.' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in 
(*select your table names*) 

-1

Pruebe setuser. Ejemplo

declare @schema nvarchar (256) 
set @schema=(
    select top 1 TABLE_SCHEMA 
    from INFORMATION_SCHEMA.TABLES 
    where TABLE_NAME='MyTable' 
) 
if @schema<>'dbo' setuser @schema 
+0

No creo que esto haga lo que el OP está pidiendo. [SETUSER] (https://msdn.microsoft.com/en-us/library/ms186297.aspx) parece ser para cambiar el usuario actual, no el esquema actual. Además, la documentación vinculada implica que está en desuso ... – Will

Cuestiones relacionadas