我有两个表,一个表有rowguid列,另一个表有自动递增列,但两个表都没有主键或外键。我想创建第三个表来存储上面两个表之间的关系。有人可以给我正确和最简单的方法来做到这一点。我是新的使用SQL Server。请回复我
答案 0 :(得分:0)
首先,您必须调用这些表如何相互关联。必须有一些业务/逻辑规则才能做到这一点,这将是原始的关联。
然后你可以试试像
这样的东西DECLARE @TableGuid TABLE(
GuidID UNIQUEIDENTIFIER DEFAULT NEWID(),
Val VARCHAR(10)
)
DECLARE @TableID TABLE(
ID INT IDENTITY(1,1),
Val VARCHAR(10)
)
INSERT @TableGuid (Val) SELECT 'A'
INSERT @TableID (Val) SELECT 'A'
SELECT * FROM @TableGuid
SELECT * FROM @TableID
DECLARE @TableManyMany TABLE(
GuidID UNIQUEIDENTIFIER,
ID INT,
PRIMARY KEY(GuidID, ID)
)
INSERT INTO @TableManyMany
SELECT GuidID,
ID
FROM @TableGuid g INNER JOIN
@TableID i ON g.Val = i.Val
SELECT *
FROM @TableManyMany
答案 1 :(得分:0)
Amby,除非通过脚本,否则不要对数据库做任何事情。使用GUI界面是一种非常糟糕的做法,你现在需要打破习惯。你需要脚本中的东西,以便你可以将它们放在源代码管理中并使用它们部署到其他服务器。
从来没有,我的意思是永远,没有主键的表。那是数据库设计的第一天。如果您没有主键,那么您至少有一个唯一索引吗?如果没有,您可以获得重复的值,这是不好的。任何没有唯一标识行的方法的表都会被破坏。在你走得更远之前解决这个问题。
您还需要一些方法来确定两个表之间的关系。你怎么知道tablea中的哪条记录与tableb中的哪条记录相匹配?由于您有两种不同的数据类型,这不是关系,因此您需要在两个表中创建一些其他字段(或字段组合)以构建关系。如果你没有,那么这种关系的基础是什么。请在两个表中显示示例数据,并在桥接表中显示您想要的数据。我相信你还没有根据发布的内容充分考虑到桌面设计。