간단한 테스트 베드 :
USE tempdb;
GO
/*
This DROP TABLE should not be necessary, since the DROP SCHEMA
should drop the table if it is contained within the schema, as
I'd expect it to be.
*/
IF COALESCE(OBJECT_ID('tempdb..#MyTempTable'), 0) <> 0
DROP TABLE #MyTempTable;
IF EXISTS (SELECT 1 FROM sys.schemas s WHERE s.name = 'SomeSchema')
DROP SCHEMA SomeSchema;
GO
CREATE SCHEMA SomeSchema AUTHORIZATION [dbo]
CREATE TABLE SomeSchema.#MyTempTable /* specifying the schema
should not be necesssary since
this statement is executed inside
the context of the CREATE SCHEMA
statement
*/
(
TempTableID INT NOT NULL IDENTITY(1,1)
, SomeData VARCHAR(50) NOT NULL
);
GO
INSERT INTO tempdb.SomeSchema.#MyTempTable (SomeData) VALUES ('This is a test');
SELECT *
FROM tempdb.SomeSchema.#MyTempTable;
GO
SELECT *
FROM sys.objects o
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE s.name = 'SomeSchema';
SELECT s.name
, o.name
FROM sys.objects o
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE s.name = 'dbo'
AND o.name LIKE '%MyTempTable%';
DROP SCHEMA SomeSchema;
DROP TABLE #MyTempTable;
위의 이름 으로 스키마 아래에 tempdb 라는 임시 테이블을 작성 해야합니다 . 그러나 그렇지 않습니다. 대신 테이블이 스키마에 작성됩니다 . #MyTempTable
SomeSchema
dbo
이것이 예상되는 동작입니까? 필자는 이것이 스키마 별 임시 테이블 사용과 관련하여 확실한 사례라는 것을 알고 있습니다. 그러나 스키마 바인딩 된 임시 테이블을 만들려고 할 때 엔진에 오류가 발생했거나 실제로 DDL에 지정된 스키마에 바인딩하면 좋을 것입니다.
또한 현재 SQL Server 2014 또는 2016에 액세스 할 수 없습니다. 해당 플랫폼에서 예상대로 작동합니까?
70-461의 교육 키트에는 '임시 테이블이 dbo 스키마의 tempdb에 생성됩니다.'라고 명시되어 있지만, 그보다 더 많은 정보는 포함되어 있지 않기 때문에 이것이 필요할 때만 의미가 있는지 확실하지 않습니다. t 스키마를 지정하십시오.
—
Mark Sinkinson