Giường thử đơn giản:
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;
Ở trên sẽ tạo một bảng tạm thời có tên #MyTempTable
trong tempdb dưới lược đồ có tên SomeSchema
; tuy nhiên nó không. Thay vào đó, bảng được tạo trong dbo
lược đồ.
Đây có phải là hành vi dự kiến? Tôi nhận ra rằng đây chắc chắn là một trường hợp cạnh xung quanh việc sử dụng các bảng tạm thời dành riêng cho lược đồ; tuy nhiên, sẽ rất tuyệt nếu công cụ cung cấp lỗi khi cố gắng tạo bảng tạm thời ràng buộc lược đồ hoặc thực sự đã liên kết nó với lược đồ được chỉ định trong DDL.
Ngoài ra, hiện tại tôi không có quyền truy cập vào SQL Server 2014 hoặc 2016; nó có hoạt động như mong đợi trên các nền tảng đó không?