Tsql T-SQL查询以修复不良关系
好的,我使用的是SQLServer2008R2,有几个关系需要调整一下。下面是我的数据库设计示例(不是实际的,但显示了问题) 在这种情况下,产品是模型之一,由制造商制造。我需要做的是将Mfgrs表与Models表关联起来,因为给定的模型是由Mfgr制作的,并且与最终产品有单独的链接是糟糕的设计 这将使用实时数据对实际数据库进行建模,因此这不仅仅是一个练习。我想做的是在模型中添加一列,称之为MfgrID,并创建一个从模型到Mfgrs的关系。那么Mfgr将与模型建立一对多关系,模型与产品建立一对多关系,世界将变得更美好 好吧,反正我的世界会更美好 我想在旧关系的基础上创建新关系,这样每个模型都会得到一个MfgrID 这指向该型号的任何给定产品的制造厂。一旦建立,我将返回并删除产品与Mfgrs的关系 有问题吗?我很欣赏所有的想法,我一直在试图设计一个简洁的查询来实现这一点Tsql T-SQL查询以修复不良关系,tsql,Tsql,好的,我使用的是SQLServer2008R2,有几个关系需要调整一下。下面是我的数据库设计示例(不是实际的,但显示了问题) 在这种情况下,产品是模型之一,由制造商制造。我需要做的是将Mfgrs表与Models表关联起来,因为给定的模型是由Mfgr制作的,并且与最终产品有单独的链接是糟糕的设计 这将使用实时数据对实际数据库进行建模,因此这不仅仅是一个练习。我想做的是在模型中添加一列,称之为MfgrID,并创建一个从模型到Mfgrs的关系。那么Mfgr将与模型建立一对多关系,模型与产品建立一对多关
Dave如果您每个型号只有一个产品,这应该可以做到
ALTER TABLE Models ADD MfgrID INT NULL FOREIGN KEY REFERENCES Mfgrs(MfgrID);
UPDATE m SET MfgrID = p.MfgrID
FROM Models m JOIN Products p ON m.ModelID=p.ModelID;
如果您希望MfgrID是强制的,并且该列中没有空值,那么可能在末尾
ALTER TABLE Models ALTER COLUMN MfgrID INT NOT NULL;
为了确保这一点,您不应该在未经测试的情况下从Internet在生产数据库上运行任何人的随机脚本;-) 我希望SQL能够修复糟糕的关系!;-)嗯,是的,说得好。我确实有一个dev数据库,可以使用真实的数据,但是谢谢你的警告!顺便说一句,你的剧本写得很好!想弄明白那句话的语法让我头疼,不知道为什么。。。
ALTER TABLE Models ALTER COLUMN MfgrID INT NOT NULL;