programing

SQL 쿼리에 대한 기본 스키마 설정

batch 2023. 6. 25. 18:33
반응형

SQL 쿼리에 대한 기본 스키마 설정

쿼리의 스키마를 설정하여 나머지 쿼리에서 테이블 앞에 스키마 이름을 추가하지 않고 테이블 이름만으로 참조할 수 있는 방법이 있습니까?

예를 들어, 저는 다음과 같은 일을 하고 싶습니다.

Use [schemaName]
select * from [tableName]

이와 반대로:

select * from [schemaName].[tableName]

빠른 구글이 이 페이지를 가리켰습니다.SQL Server 2005 이후부터는 ALTER USER 문으로 사용자의 기본 스키마를 설정할 수 있습니다.안타깝게도 이는 스키마를 영구적으로 변경한다는 의미이므로 스키마를 전환해야 하는 경우 저장 프로시저 또는 문 배치를 실행할 때마다 스키마를 설정해야 합니다.또는 여기에 설명된 기술을 사용할 수 있습니다.

SQL Server 2000 이전 버전을 사용하는 경우 이 페이지에서는 사용자와 스키마가 동일하다고 설명합니다.테이블 이름 앞에 스키마\user를 추가하지 않으면 SQL 서버는 먼저 현재 사용자가 소유한 테이블과 dbo가 소유한 테이블을 확인하여 테이블 이름을 확인합니다.다른 모든 테이블의 경우 스키마\user 앞에 추가해야 합니다.

는 이것을 "하지 않습니다. (은 "질문별"을 할 수 .)use스키마가 아닌 데이터베이스를 지정하기 위한 키워드입니다. 하지만 그것은 기술적으로 별개의 쿼리입니다. 왜냐하면 당신이 그것을 발행해야 하기 때문입니다.go나중에 명령합니다.)

SQL 서버에서 정규화된 테이블 이름은 다음 형식입니다.

[속닥속닥속닥[속닥속닥속닥[표]

SQL Server Management Studio에서 질문하는 모든 기본값을 구성할 수 있습니다.

  • 할 수 .database사용자 단위(또는 연결 문자열):

    보안 > 로그인 > (우클릭) 사용자 > 속성 > 일반

  • 할 수 .schema로 (단합니다.)dbo이는 항상 기본값입니다.

    보안 > 로그인 > (우클릭) 사용자 > 속성 > 사용자 매핑 > 기본 스키마

간단히 말해서, 만약 당신이dbo스키마의 경우 두통이 최소화될 가능성이 높습니다.

아주 오래된 질문이지만 구글이 저를 여기로 안내했기 때문에 유용하다고 생각한 솔루션을 추가하겠습니다.

1단계. 사용할 수 있어야 하는 각 스키마에 대한 사용자를 만듭니다.예: "user_myschema"

2단계. EXECUTE AS를 사용하여 SQL 문을 필요한 스키마 사용자로 실행합니다.

3단계. REBERT를 사용하여 원래 사용자로 다시 전환합니다.

예:기본 스키마가 아닌 스키마 "otherschema"에 테이블 "mytable"이 있다고 가정해 보겠습니다."SELECT * FROM my table"을 실행하면 작동하지 않습니다.

"user_otherschema"라는 사용자를 만들고 해당 사용자의 기본 스키마를 "otherschema"로 설정합니다.

이제 이 스크립트를 실행하여 테이블과 상호 작용할 수 있습니다.

EXECUTE AS USER = 'user_otherschema';
SELECT * FROM mytable
REVERT

되돌리기 문은 현재 사용자를 재설정하므로 사용자는 다시 원래 상태가 됩니다.

EXECUTE AS 문서 링크: https://learn.microsoft.com/en-us/sql/t-sql/statements/execute-as-transact-sql?view=sql-server-2017

테이블 이름이 많이 필요할 때 가끔 수행하는 작업은 INFORMATION_SCHEMA 시스템 테이블에서 스키마와 함께 가져옵니다. value


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

SETUSER는 필요한 기본 스키마를 사용하여 DB에 고립된 사용자가 있는 경우에도 작동할 수 있습니다.그러나 SETUSER는 이전에는 지원되지 않는 레거시 목록에 있습니다.따라서 유사한 대안으로 필요한 기본 스키마를 사용하여 애플리케이션 역할을 설정하는 것이 있습니다. 교차 DB 액세스가 필요하지 않은 경우 이 역할은 매우 유용합니다.

setuser를 사용해 보십시오.

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

스키마를 동적으로 추가하거나 다른 스키마로 변경할 수 있는 다른 방법

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))

nvarchar 또는 varchar인 경우 @ID를 캐스트할 필요가 없습니다.

실행(@SQL)

Oracle의 경우 다음과 같은 간단한 명령을 사용하십시오.

ALTER SESSION SET current_schema = your-schema-without-quotes;

언급URL : https://stackoverflow.com/questions/4942023/set-default-schema-for-a-sql-query

반응형