J'ai créé mon type de table défini avec
CREATE TYPE dbo.MyTableType AS TABLE
(
Name varchar(10) NOT NULL,
ValueDate date NOT NULL,
TenorSize smallint NOT NULL,
TenorUnit char(1) NOT NULL,
Rate float NOT NULL
PRIMARY KEY (Name, ValueDate, TenorSize, TenorUnit)
);
et je voudrais créer une table de ce type. De cette réponse la suggestion était d'essayer
CREATE TABLE dbo.MyNewTable AS dbo.MyTableType
qui a généré le message d'erreur suivant dans SQL Server Express 2012:
Syntaxe incorrecte près du mot clé 'OF'.
N'est-ce pas pris en charge par SQL Server Express? Si tel est le cas, pourrais-je le créer d'une autre manière, en utilisant par exemple DECLARE
?
--Create table variable from type.
DECLARE @Table AS dbo.MyTableType
--Create new permanent/physical table by selecting into from the temp table.
SELECT *
INTO dbo.NewTable
FROM @Table
WHERE 1 = 2
--Verify table exists and review structure.
SELECT *
FROM dbo.NewTable
C'est comme un autre type de données dans votre serveur SQL. Créer une table d'un type défini par l'utilisateur n'existe pas dans SQL Server. Ce que vous pouvez faire est de déclarer une variable de ce type et de la renseigner, mais vous ne pouvez pas créer une table de ce type.
Quelque chose comme ça...
/* Declare a variable of this type */
DECLARE @My_Table_Var AS dbo.MyTableType;
/* Populate the table with data */
INSERT INTO @My_Table_Var
SELECT Col1, Col2, Col3 ,.....
FROM Source_Table
Le type de table est un modèle. Vous devez utiliser cet objet pour créer une table. Le readonly est la seule option que vous avez.
Create proc NewT @ X MyTableType en lecture seule En tant que Select * from @x
Vous pouvez maintenant lister les colonnes de la table instanciée appelant la procédure stockée. Exec NewT
Le serveur IN SQL utilise la syntaxe suivante pour copier le tableau
SELECT * INTO newtablename FROM oldtablename;