标题可能会产生误导。我正在使用MSSQL数据库服务器。
我想要达到的目标 - 我希望基于不同的语言有重复的记录。
例如,我列*language*
和列*id*
- 两个主键。
我想要的结果:
id lang name
1 English x
1 Foreign y
如何达到此目的? MSSQL不允许我插入具有相同id的值。
我在论坛中已经读到这是不可能的,但是再一次,我有一个使用MSSQL的真实存在结构的例子:
我找到的一个解决方案是 - 将身份规范设置为 no 。我不确定这是最好的方法。有什么想法吗?
答案 0 :(得分:2)
您可以拥有COMPOSITE PRIMARY KEY
PRIMARY KEY
,two or more columns
来自CREATE TABLE MYTABLE (
id INT,
lang char(200),
name char(200),
primary key (id, lang)
);
。
例如:
ALTER TABLE MYTABLE
DROP CONSTRAINT PK_Table1_ColID
ALTER TABLE MYTABLE
ADD CONSTRAINT PK_Table1_ColIDLANG PRIMARY KEY (id, lang)
您可以参考this document以了解有关复合主键的更多信息。
修改:
对于编辑/更改现有表格,您可以执行以下操作:
SET IDENTITY_INSERT MYTABLE ON;
/* Do inserts */
SET IDENTITY_INSERT MYTABLE OFF;
要在标识列中显式插入值,请执行以下操作:
/ define fineUploader
$('div#' + thisUpload).fineUploader({
debug: data.debug_enable,
request: {
endpoint: '{url controller=Basketupload action=doUpload forceSecure}'
}
callbacks: {
onError: function(id, name, errorReason, xhrOrXdr) {
//fetch the error and open dialog
$( ".qq-confirm-dialog-selector" ).dialog({...});
//
}
}
答案 1 :(得分:0)
使用id和lang作为复合主键,因此这两个属性的组合必须是唯一的:
CREATE TABLE testTable (
id int not null,
lang varchar(30) not null,
name varchar(50),
PRIMARY KEY (id, lang)
);
答案 2 :(得分:0)
如果您将id
字段设置为标识,则它会自动在该列中为每一行添加新值。这就是标识列的含义。因此,如果您确实需要一些重复值,则需要将标识设置为no。然后在插入时,可以将任何您喜欢的值插入该列。
如果您想拥有身份功能,但也选择要插入的内容,则可以使用identity insert
功能:
set identity_insert [tablename] on;
insert into [tablename] (id, lang, name) values
(1, 'English', 'x'),
(1, 'Foreign', 'y')
set identity_insert [tablename] off;
您还可以按照其他答案中的建议使用复合主键。