我有两个相同的表(x)和(y)(我从表x到表y进行了备份)我删除了表x中的所有内容以重新生成新行(我添加了restmilk_3作为额外参数)。
现在我的ID在表x中是新的(它移动了因为我添加了restmilk_3),所以我想将表y中的值复制到x名称和RID(配方ID)
看起来如何:
**table y**
ID - RID - Name - Value
1 - Cheese_rec_100 - restmilk_1 - cheese1
2 - Cheese_rec_100 - restmilk_2 - cheese3
3 - Cheese_rec_100 - milkamount - 5000
..
100- Cheese_rec_100 - milkdensity - 0.46
**table x** (We added restmilk 3 as a new parameter):
ID - RID - Name - Value
1 - Cheese_rec_100 - restmilk_1 - NULL
2 - Cheese_rec_100 - restmilk_2 - NULL
3 - Cheese_rec_100 - restmilk 3 - NULL
4 - Cheese_rec_100 - milkamount - NULL
..
100- Cheese_rec_100 - milkdensity - NULL
After the query:
ID - RID - Name - Value
1 - Cheese_rec_100 - restmilk_1 - cheese1
2 - Cheese_rec_100 - restmilk_2 - cheese3
3 - Cheese_rec_100 - restmilk 3 - NULL
4 - Cheese_rec_100 - milkamount - 5000
..
100- Cheese_rec_100 - milkdensity - 0.46
所以我不能使用ID作为密钥来复制Value,但我需要检查两个表中的RID和Name是否相等。
我尝试了很多东西,但我没有技能/经验来解决这个难题。
我使用的是Microsoft SQL Server Management Studio 数据库排序规则:Latin1_General_CI_AS 兼容级别:SQL Server 2012
我拥有管理员的所有权利。
示例现有表格:
ID RID Version NodeID Name TagAddress Value
854389 Cheese_Rec_00100 61 8 _RestMilk14 - 0
854390 Cheese_Rec_00100 61 8 _RestMilk15 - 0
854391 Cheese_Rec_00100 61 8 _RestMilk16 - 0
854392 Cheese_Rec_00100 61 8 _RestMilk17 - 0
854393 Cheese_Rec_00100 61 8 _RestMilk18 - 0
854394 Cheese_Rec_00100 61 8 _Starter1388Delay - 240
854395 Cheese_Rec_00100 61 8 _Starter1388Target - 90
854396 Cheese_Rec_00100 61 8 _Starter1389Delay - 0
854397 Cheese_Rec_00100 61 8 _Starter1389Target - 0
854398 Cheese_Rec_00100 61 8 _TransPercentageFat - 0,94
854399 Cheese_Rec_00100 61 8 _TransPercentProtein - 0,935
854400 Cheese_Rec_00100 61 8 _VATPostWaterTempSP - 33,1
854401 Cheese_Rec_00100 61 8 _VATRecipeNo - 19
854402 Cheese_Rec_00100 61 8 _WheyCreamLimit - 2
854403 Cheese_Rec_00100 61 8 _AmountOfMilk - 1000
854404 Cheese_Rec_00100 61 8 _AverageWeightAt15D - 13,3
854405 Cheese_Rec_00100 61 8 _CaCl2Delay - 600
854406 Cheese_Rec_00100 61 8 _CaCl2Target - 0,1337
答案 0 :(得分:0)
您可以使用UNION检查/确保表X和Y中的RID和NAME列是否相等..
SELECT RID,Name FROM y 联盟 SELECT RID,名称来自X
如果返回的行数等于表X中的行数,则按照您在评论中提到的更新。
UPDATE X SET X.VALUE = Y.VALUE 来自X. INNER JOIN Y ON Y.RID = X.RID AND Y.NAME = X.NAME
希望这有帮助。
答案 1 :(得分:0)
最后这是我的代码:
update [TPMDB].[dbo].[RecipeNodeParameter]
set
[TPMDB].[dbo].[RecipeNodeParameter].Value = [TPMDB].[dbo].[RecipeNodeParameter_2].Value,
[TPMDB].[dbo].[RecipeNodeParameter].MaterialTagAddress = [TPMDB].[dbo].[RecipeNodeParameter_2].MaterialTagAddress,
[TPMDB].[dbo].[RecipeNodeParameter].[Material_PLCID] = [TPMDB].[dbo].[RecipeNodeParameter_2].[Material_PLCID] ,
[TPMDB].[dbo].[RecipeNodeParameter].[Material_SiteMaterialAlias] = [TPMDB].[dbo].[RecipeNodeParameter_2].[Material_SiteMaterialAlias],
[TPMDB].[dbo].[RecipeNodeParameter].[Material_Name] = [TPMDB].[dbo].[RecipeNodeParameter_2].[Material_Name]
From [TPMDB].[dbo].[RecipeNodeParameter]
INNER Join [TPMDB].[dbo].[RecipeNodeParameter_2] ON
[TPMDB].[dbo].[RecipeNodeParameter_2].RID = [TPMDB].[dbo].[RecipeNodeParameter].RID
AND
[TPMDB].[dbo].[RecipeNodeParameter_2].Name = [TPMDB].[dbo].[RecipeNodeParameter].Name
WHERE[TPMDB].[dbo].[RecipeNodeParameter].RID like '%cheese_rec_00100%'