SQL 쿼리에 대한 기본 스키마 설정
나머지 쿼리에서 스키마 이름을 추가하지 않고 이름으로 테이블을 참조 할 수 있도록 쿼리에 대한 스키마를 설정하는 방법이 있습니까?
예를 들어 다음과 같이하고 싶습니다.
Use [schemaName]
select * from [tableName]
이와 반대로 :
select * from [schemaName].[tableName]
빠른 구글이 저를 이 페이지로 안내했습니다 . SQL Server 2005부터는 ALTER USER 문을 사용하여 사용자의 기본 스키마를 설정할 수 있음을 설명합니다. 불행히도 이는 영구적으로 변경한다는 것을 의미하므로 스키마간에 전환해야하는 경우 저장 프로 시저 또는 문 일괄 처리를 실행할 때마다 설정해야합니다. 또는 여기에 설명 된 기술을 사용할 수 있습니다 .
SQL Server 2000 또는 이전 버전을 사용하는 경우이 페이지 에서는 사용자와 스키마가 동일하다고 설명합니다. 테이블 이름 앞에 schema \ user를 추가하지 않으면 SQL Server는 먼저 현재 사용자가 소유 한 테이블을 확인한 다음 dbo가 소유 한 테이블을 확인하여 테이블 이름을 확인합니다. 다른 모든 테이블의 경우 schema \ user를 앞에 추가해야합니다.
이 작업을 수행하는 "쿼리 별"방법이 있다고 생각하지 않습니다. ( use키워드를 사용하여 스키마가 아닌 데이터베이스 를 지정할 수 있지만 go나중에 명령을 실행 해야하므로 기술적으로 별도의 쿼리 입니다.)
SQL Server에서 정규화 된 테이블 이름은 다음 형식임을 기억하십시오.
[데이터베이스]. [스키마]. [테이블]
SQL Server Management Studio에서 요청하는 모든 기본값을 구성 할 수 있습니다.
database사용자별로 (또는 연결 문자열에서) 기본값 을 설정할 수 있습니다 .보안> 로그인> (오른쪽 클릭) 사용자> 속성> 일반
schema사용자별로 기본값 을 설정할 수 있습니다 (그러나 사용dbo하는 경우 항상 기본값 이지만 연결 문자열에서 구성 할 수 있다고 생각하지 않습니다 ).보안> 로그인> (오른쪽 클릭) 사용자> 속성> 사용자 매핑> 기본 스키마
간단히 말해, dbo스키마에 사용하면 두통이 가장 적을 것입니다.
많은 테이블 이름이 필요할 때 가끔 수행하는 작업은 INFORMATION_SCHEMA 시스템 테이블에서 해당 스키마와 함께 가져옵니다.
select TABLE_SCHEMA + '.' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in
(*select your table names*)
SETUSER는 필요한 기본 스키마가있는 DB에있는 고아 사용자를 포함하여 작동 할 수 있습니다. 그러나 SETUSER는 영원히 지원되지 않는 레거시에 있습니다. 따라서 유사한 대안은 DB 간 액세스가 필요하지 않은 한 필요한 기본 스키마로 응용 프로그램 역할을 설정하는 것입니다.
아주 오래된 질문이지만 Google이 여기에서 나를 이끌었 기 때문에 유용한 솔루션을 추가하겠습니다.
1 단계. 사용할 수 있어야하는 각 스키마에 대한 사용자를 만듭니다. 예 : "user_myschema"
2 단계. EXECUTE AS를 사용하여 필수 스키마 사용자로 SQL 문을 실행합니다.
3 단계. REVERT를 사용하여 원래 사용자로 다시 전환합니다.
예 : 기본 스키마가 아닌 스키마 "otherschema"에 "mytable"테이블이 있다고 가정 해 보겠습니다. "SELECT * FROM mytable"실행은 작동하지 않습니다.
"user_otherschema"라는 사용자를 만들고 해당 사용자의 기본 스키마를 "otherschema"로 설정합니다.
이제이 스크립트를 실행하여 테이블과 상호 작용할 수 있습니다.
EXECUTE AS USER = 'user_otherschema';
SELECT * FROM mytable
REVERT
revert 문은 현재 사용자를 재설정하므로 다시 자신이됩니다.
EXECUTE AS 설명서 링크 : https://docs.microsoft.com/en-us/sql/t-sql/statements/execute-as-transact-sql?view=sql-server-2017
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)
참고 URL : https://stackoverflow.com/questions/4942023/set-default-schema-for-a-sql-query
'Program Club' 카테고리의 다른 글
| 내 활동 중 하나가 포 그라운드에 있는지 확인하는 방법 (0) | 2020.12.09 |
|---|---|
| backbone.js를 배우는 가장 좋은 방법은 무엇입니까? (0) | 2020.12.09 |
| 사용 가능한 backbone.js 책이 있습니까? (0) | 2020.12.09 |
| 봄 — 같은 종류의 콩 2 개 주입 (0) | 2020.12.08 |
| 듀얼 모니터에서 IntelliJ를 어떻게 설정합니까? (0) | 2020.12.08 |