SQL Server:具有不同数据类型的列时的复合PK问题

时间:2017-07-03 18:19:23

标签: sql-server-2012

看到我的代码它无法正常工作但却无法理解为什么?

我正在尝试创建具有不同数据类型

的列的复合pk

当我尝试这个时

CREATE TABLE [dbo].[ControllerActionItems](
    [ControllerName] [varchar](50) NULL,
    [ActionName] [varchar](50) NULL,
    [RoleID] [int] NULL,

    primary key ([ControllerName], [ActionName],[RoleID])
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

收到此错误消息

  

消息1709,级别16,状态1,行2当a时不能使用TEXTIMAGE_ON   table没有text,ntext,image,varchar(max),nvarchar(max),   非FILESTREAM varbinary(max),xml或大型CLR类型列。

解决了更新的代码

CREATE TABLE [dbo].[ControllerActionItems](
    [ControllerName] [varchar](50) NOT NULL,
    [ActionName] [varchar](50) NOT NULL,
    [RoleID] [int] NOT NULL,

    primary key ([ControllerName], [ActionName],[RoleID])
) 

1 个答案:

答案 0 :(得分:1)

如错误所述,您需要使用指定列之一来使用TEXTIMAGE_ON,例如,如果您使用varchar(MAX)而不是varchar(50)。但是,根据this other answer,您正在做的事情似乎是多余的,因为默认行为是在PRIMARY中存储大文本值列。

除非您在表中实际拥有大格式列,否则只需从SQL语句中删除TEXTIMAGE_ON [PRIMARY]