सरल परीक्षण-बिस्तर:
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;
ऊपर नामित स्कीमा के तहत अस्थायी तालिका में नामित एक अस्थायी तालिका बनाना चाहिए ; हालाँकि यह नहीं है। इसके बजाय तालिका स्कीमा में बनाई गई है । #MyTempTable
SomeSchema
dbo
क्या यह अपेक्षित व्यवहार है? मुझे पता है कि यह निश्चित रूप से स्कीमा-विशिष्ट अस्थायी तालिकाओं के उपयोग के आसपास का एक किनारा-मामला है; हालाँकि यह अच्छा होगा यदि स्कीमा-बाउंड अस्थायी तालिका बनाने का प्रयास करते समय इंजन या तो एक त्रुटि प्रदान करता है, या वास्तव में इसे डीडीएल में निर्दिष्ट स्कीमा से बाँधता है।
इसके अलावा, मेरे पास वर्तमान में SQL Server 2014 या 2016 तक पहुंच नहीं है; क्या यह उन प्लेटफार्मों पर अपेक्षित रूप से काम करता है?