sql - 확인 - 에서 참조 하고 있으므로 drop schema 할 수 없습니다




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

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

스키마 이름을 미리 지정하지 않고 이름만으로 테이블을 참조 할 수 있도록 쿼리의 스키마를 설정하는 방법이 있습니까?

예를 들어, 다음과 같이하고 싶습니다.

Use [schemaName]
select * from [tableName]

이와 반대로 :

select * from [schemaName].[tableName]

나는 이것을 수행하는 "쿼리 당"방법이 있다고 생각하지 않는다. (스키마가 아닌 데이터베이스 를 지정하기 위해 use 키워드를 use 수 있지만 나중에 go 명령을 실행해야하는 것과는 기술적으로 별개의 쿼리입니다.)

SQL 서버에서 정규화 된 테이블 이름의 형식은 다음과 같습니다.

[데이터베이스]. [스키마]. [테이블]

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

  • 기본 database 를 사용자 단위 (또는 연결 문자열)로 설정할 수 있습니다.

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

  • 사용자마다 기본 schema 를 설정할 수 있습니다 (단, 항상 기본값 인 dbo 를 사용하는 경우에도 연결 문자열에서 구성 할 수 있다고는 생각하지 않습니다).

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

즉, 스키마에 dbo 를 사용 dbo 두통이 가장 적을 것입니다.


빠른 구글 이이 페이지 를 가리켰다. SQL Server 2005부터는 ALTER USER 문을 사용하여 사용자의 기본 스키마를 설정할 수 있다고 설명합니다. 불행하게도, 그것은 당신이 그것을 영구적으로 변경한다는 것을 의미한다. 그래서 당신이 스키마들 사이를 전환 할 필요가 있다면, 당신은 저장 프로 시저 또는 문장들의 묶음을 실행할 때마다 그것을 설정해야 할 것이다. 또는 here 설명 된 기술을 사용할 수 있습니다.

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


필자가 때때로 tablenames를 많이 필요로 할 때 INFORMATION_SCHEMA 시스템 테이블에서 스키마를 더한 값을 얻습니다. value


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





schema