我有两个表“Container”和“Control”。这些是现有的表,两者之间没有外键关系。这些也是非常古老的表,所以没有标准化。我现在无法改变结构。
以下是两个表格的结构。
容器表:
控制表:
Control表中的Name字段包含Container表中的CTableName + CPName。
我想用Container表的CID列的值更新Control表的columnName字段。并且还希望在控制表中再插入一条记录(对于ctable2,即下面最终控制表中的第四行)。
tablename和columnname列将始终具有默认值。
最终的控制表应如下所示:
我该怎么做?
答案 0 :(得分:0)
我希望你想应用这个修补程序,因为你想要规范化你的表结构。
试试这个:
第一步:
通过这种方式,您可以使用Container表的值更新所有Control行,其中,耦合字段CTableName和CPName与Name相同(不包括具有相同耦合字段的Container行)
UPDATE Control
SET ColumnValue = (
SELECT c.CID
FROM Container c
WHERE c.CTableName + '+' + c.CPName = Control.Name
AND NOT EXISTS(
SELECT 'PREVIOUS'
FROM Container c2
WHERE c.CTableName = c2.CTableName
AND c.CPName = c2.CPName
AND c.CID < c2.CID
)
),
TableName = 'default', ColumnName = 'default'
WHERE ColumnValue IS NULL
第二步:
添加控件表中不存在的元素
INSERT INTO Control (field list)
SELECT field list
FROM Container co
WHERE NOT EXISTS(
SELECT 'in_control'
FROM Control ct
WHERE co.CID = ct.ColumnValue
)
完成这两个步骤后,您可以删除控制表中的列名
答案 1 :(得分:-1)
我是Oracle plsql程序员,并且也使用过Sql-server。
首先你应该描述两张桌子之间的关系,最后我可以搞清楚,但你最好自己解释一下。 要使用另一个表中的信息更新表,您应该问自己: - 何时应该进行更新? - 开始更新的条件是什么? - 如何进行更新?
在Oracle中,有一个名为触发器的数据库对象。它是一个非常方便的对象,可能就是你需要的东西。我相信sql-server也有它。
请免费提出任何问题,但也请阅读sql-server相应的手册。
好运,爱德华。