Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何制作复合主键?_Sql_Sql Server_Composite Primary Key - Fatal编程技术网

Sql 如何制作复合主键?

Sql 如何制作复合主键?,sql,sql-server,composite-primary-key,Sql,Sql Server,Composite Primary Key,如何使组合主键与列_1+'-'+列_2类似,所选列来自另一个表?主键由定义主键的表中的列组成,而不是由另一个表中的列组成。您可以将其定义为: create table t ( column_1 <type>, column_2 <type>, primary key (column_1, column_2) ); 您不指定类型,列的类型也不指定 我怀疑您正在创建一个连接表,而这些是对其他表的外键引用。这看起来像: create table t (

如何使组合主键与列_1+'-'+列_2类似,所选列来自另一个表?

主键由定义主键的表中的列组成,而不是由另一个表中的列组成。您可以将其定义为:

create table t (
    column_1 <type>,
    column_2 <type>,
    primary key (column_1, column_2)
);
您不指定类型,列的类型也不指定

我怀疑您正在创建一个连接表,而这些是对其他表的外键引用。这看起来像:

create table t (
    column_1 <type>,
    column_2 <type>,
    constraint fk_t_column_1 foreign key (column_1) references t1(column_1),
    constraint fk_t_column_2 foreign key (column_2) references t1(column_2),
    primary key (column_1, column_2)
);

主键或其组件可以具有对其他表的外键引用。

主键是使用数据定义语言DDL创建的,该语言用于创建或修改对象。看起来您正在尝试使用数据操作语言DML创建主键,其中包括SELECT语句。这是不可能的

insert into items(key_id, order_id, item_id, product_id, quantity, list_price, discount)
select cast(sales.order_items.order_id as varchar(4)) + '-' +  cast(sales.order_items.item_id as varchar(4)), sales.order_items.order_id,
sales.order_items.item_id, sales.order_items.product_id, sales.order_items.quantity, sales.order_items.list_price, sales.order_items.discount
from sales.order_items

另外,看起来您正试图通过组合串联column1+'-'+column2来创建单个主键。复合主键由多个列组成。-here是无关的,因为它看起来像是用于格式化,与行中的任何其他内容都不相关。

我必须这样做:创建表t列\u PK主键;从现有表中,x必须以x.column_1+'-'+x.column_2的格式插入两列中的值。这不是复合主键,因为要将某些字段连接到单个字段中。这是家庭作业吗?如果是,您可以添加问题详细信息吗?我这里的问题是为什么需要这样做?key_id是值order_id和item_id的组合,其中包含值之间的中间划线。例如,在表格顺序中,项目顺序id为1615,项目id为3,键id为1615-3。@Charleh这是一项检查任务,可能会将实际约束与所需的信息表示混淆。破折号不会使这两列比单独的两列更独特。这一点不清楚。PS简单键有一列,复合键有多列。您描述的是一个简单键,而不是复合键。