usuario - establecer el esquema predeterminado para una consulta sql
sql server dar permisos usuario (5)
¿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 agregarles un nombre de esquema?
Por ejemplo, me gustaría hacer algo como esto:
Use [schemaName]
select * from [tableName]
a diferencia de esto:
select * from [schemaName].[tableName]
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: value
select TABLE_SCHEMA + ''.'' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in
(*select your table names*)
No creo que haya una forma "por consulta" para hacer esto. (Puede usar la palabra clave use
para especificar la base de datos , no el esquema, pero técnicamente es una consulta separada ya que debe emitir el comando go
después).
Recuerde que en el servidor SQL, los nombres de tabla totalmente calificados están en el formato:
[base de datos]. [esquema]. [tabla]
En SQL Server Management Studio puede configurar todos los valores predeterminados que está solicitando.
Puede configurar la
database
dedatabase
predeterminada por usuario (o en su cadena de conexión):Seguridad> Inicio de sesión> (clic con el botón derecho) usuario> Propiedades> General
Puede configurar el
schema
predeterminado por usuario (pero no creo que pueda configurarlo en su cadena de conexión, aunque si usadbo
siempre es el predeterminado):Seguridad> Inicio de sesión> (clic con el botón derecho) usuario> Propiedades> Asignación de usuarios> Esquema predeterminado
En resumen, si utiliza dbo
para su esquema, es probable que tenga la menor cantidad de dolores de cabeza.
Otra forma de agregar el esquema de forma dinámica o si desea cambiarlo 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 es necesario emitir @ID si es nvarchar o varchar
ejecutar (@SQL)
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
Un google rápido me indicó esta página . 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 here .
Si está utilizando SQL Server 2000 o una versión anterior, esta página explica que los usuarios y los 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.