在SQL Server 2016中使用其他类型(用户定义)创建表类型

时间:2019-01-21 10:09:11

标签: c# sql sql-server

我正在尝试创建一个具有如下所示其他类型的类型。

CREATE TYPE [dbo].[PropertyImage] AS TABLE
(
    [PropertyImage] [NVARCHAR](MAX) NULL,
    [PropertyType] [NVARCHAR](500) NULL
)

CREATE TYPE [dbo].[Properties] AS TABLE
(
    [Id] INT,
    [UserId] INT,
    [PropertyImageList] [dbo].[PropertyImage]
)

我收到此错误:

  

“ PropertyImageList”列没有有效的数据类型。列不能是用户定义的表类型。

还有其他选择吗?

3 个答案:

答案 0 :(得分:0)

也许您可以将XML列与架构一起使用。

 CREATE XML SCHEMA COLLECTION [PropertyImageXMLSchema] AS
 N' <schema xmlns="http://www.w3.org/2001/XMLSchema">  
          <element name="Image">  
           <complexType>
            <sequence>
                <element minOccurs="0" name="PropertyImage" type="string"/>
                <element minOccurs="0" name="PropertyType" type="string"/>
            </sequence>
           </complexType>
          </element>
        </schema>  ';
    GO
    CREATE TABLE [Properties]  (
        [Id] int,
        [UserId] int,
        [PropertyImageList] XML(PropertyImageXMLSchema)
    );
   GO
    INSERT INTO [Properties] (Id, UserId,PropertyImageList)
    VALUES (1,1,
    N'<Image>
        <PropertyImage>test image 1 </PropertyImage>
        <PropertyType>test type 1</PropertyType>
    </Image>
    <Image>
        <PropertyImage>test image 2 </PropertyImage>
        <PropertyType>test type 2</PropertyType>
    </Image>'
    );

答案 1 :(得分:0)

CREATE TYPE TypeName FROM nvarchar(max) 

CREATE TABLE Test(Test_Name varchar(50), Test_Data TypeName)
--Custom Type Table 

CREATE TYPE customTypeTable AS Table (name varchar(100), age int, location TypeName)  

有关更多详细信息,请单击here

答案 2 :(得分:0)

为什么您完全需要用户定义的类型?两个表的典型SQL解决方案有问题吗?

CREATE TYPE [dbo].Properties (
    PropertyId INT IDENTITY(1, 1) PRIMARY KEY,
    UserId INT
);

CREATE TABLE PropertyImages (
    PropertyImageId INT IDENTITY(1, 1) PRIMARY KEY,
    PropertyId INT NOT NULL,
    PropertyImage NVARCHAR(MAX) NULL,
    PropertyType [NVARCHAR(500) NULL,
    CONSTRAINT FK_PropertyImages_PropertyId FOREIGN KEY (PropertyId) REFERENCES Properties(PropertyId)
);