Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.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
Tsql T-SQL查询以修复不良关系_Tsql - Fatal编程技术网

Tsql T-SQL查询以修复不良关系

Tsql T-SQL查询以修复不良关系,tsql,Tsql,好的,我使用的是SQLServer2008R2,有几个关系需要调整一下。下面是我的数据库设计示例(不是实际的,但显示了问题) 在这种情况下,产品是模型之一,由制造商制造。我需要做的是将Mfgrs表与Models表关联起来,因为给定的模型是由Mfgr制作的,并且与最终产品有单独的链接是糟糕的设计 这将使用实时数据对实际数据库进行建模,因此这不仅仅是一个练习。我想做的是在模型中添加一列,称之为MfgrID,并创建一个从模型到Mfgrs的关系。那么Mfgr将与模型建立一对多关系,模型与产品建立一对多关

好的,我使用的是SQLServer2008R2,有几个关系需要调整一下。下面是我的数据库设计示例(不是实际的,但显示了问题)

在这种情况下,产品是模型之一,由制造商制造。我需要做的是将Mfgrs表与Models表关联起来,因为给定的模型是由Mfgr制作的,并且与最终产品有单独的链接是糟糕的设计

这将使用实时数据对实际数据库进行建模,因此这不仅仅是一个练习。我想做的是在模型中添加一列,称之为MfgrID,并创建一个从模型到Mfgrs的关系。那么Mfgr将与模型建立一对多关系,模型与产品建立一对多关系,世界将变得更美好

好吧,反正我的世界会更美好

我想在旧关系的基础上创建新关系,这样每个模型都会得到一个MfgrID 这指向该型号的任何给定产品的制造厂。一旦建立,我将返回并删除产品与Mfgrs的关系

有问题吗?我很欣赏所有的想法,我一直在试图设计一个简洁的查询来实现这一点


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;