Banc d'essai simple:
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;
Ce qui précède doit créer une table temporaire nommée #MyTempTable
dans la tempdb sous le schéma nommé SomeSchema
; mais ce n'est pas le cas. Au lieu de cela, la table est créée dans le dbo
schéma.
Est-ce un comportement attendu? Je me rends compte que c'est certainement un cas limite autour de l'utilisation de tables temporaires spécifiques au schéma; cependant, ce serait bien si le moteur fournissait une erreur lors de la tentative de création d'une table temporaire liée au schéma, ou s'il le liait réellement au schéma spécifié dans la DDL.
De plus, je n'ai actuellement pas accès à SQL Server 2014 ou 2016; ça marche comme prévu sur ces plateformes?