web-dev-qa-db-fra.com

créer une table SQL Server basée sur un type défini par l'utilisateur

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?

11
gt6989b
--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
21
Dave Mason

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
3
M.Ali

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

0
user2063329

Le serveur IN SQL utilise la syntaxe suivante pour copier le tableau

SELECT * INTO newtablename FROM oldtablename;
0
VJ Hil