我有相当的SQL难题。
我是第一个合作社职位的初级程序员,我获得了一个包含三个表格的数据库。三个表中的任何一个都没有主键。这些表彼此之间没有初始关系。这是(大致)设计数据库的方式。
Table 1 Table2 Table3
======== ======== ========
SSerial BSerial MSerial
B1 data2 data2
B2 data3 data3
B3 data4 data4
M1 data5 data5
M2 data6 data6
M3 data7 data7
SSerial,BSerial和MSerial具有永远不会重复的唯一字母数字值(nvarchar(MAX))。
BSerial的值可以在表1的B1,B2和B3中找到。
MSerial的值可以在表1的M1,M2和M3中找到。
我正在处理的应用程序的最终目标是允许客户端按表1中的唯一SSerial编号进行搜索,然后查看B1,B2和B3中的BSerial值。他们也可以使用M1,M2和M3中的MSerial值进行相同的操作。
我尝试过实现一个主键,这样我就可以在Table1和其他表之间添加一个关系,但是没有用。
当我尝试创建主键时:
ALTER TABLE dbo.Table2
ADD Table2_ID int NOT NULL IDENTITY (1,1);
ALTER TABLE dbo.Table2
ADD CONSTRAINT PK_Table2_ID PRIMARY KEY (Table2_ID, BSerial);
我很幸运,收到以下错误消息:
Msg 1919, Level 16, State 1, Line 1
Column 'BSerial' in table 'Table2' is of a type that is invalid for use as a key column in an index.
其他信息:
这是我的第一个Stack Overflow问题,如果需要更多信息,我非常欢迎您详细说明。谢谢你的时间!
答案 0 :(得分:1)
将数据类型从NVARCHAR(MAX)
更改为NVARCHAR(450)
。
索引的密钥不能超过900字节的总大小。
答案 1 :(得分:0)
我建议重新设计你的数据库,但如果这不实用,你不需要主键来实现你的目标。要使下面的代码工作,BSerial和MSerial值必须与表1完全匹配。
_.mixin()