sql - 在子表上插入并在父表上更新 FK
问题描述
我有一个具有以下结构和数据的父表:
---------------------------------------------
| Id | TranslationId | Name |
---------------------------------------------
| 1 | NULL | Image1.jpg |
| 2 | NULL | Image7.jpg |
| 3 | NULL | Picture_Test.png |
---------------------------------------------
以及包含翻译图像的空子表:
-------------------------------------------------------------------------
| Id | De | Fr | En |
-------------------------------------------------------------------------
| | | | |
-------------------------------------------------------------------------
现在,我正在寻找一个查询语句或至少几个无需任何进一步编程即可运行的查询。使用脚本或编程来完成这项工作很容易,但我经常遇到需要这种插入/更新的情况。而且每次开发一个小型控制台应用程序是不可行的。
最后,两个表应如下所示:
---------------------------------------------
| Id | TranslationId | Name |
---------------------------------------------
| 1 | 28 | NULL |
| 2 | 29 | NULL |
| 3 | 30 | NULL |
---------------------------------------------
-------------------------------------------------------------------------
| Id | De | Fr | En |
-------------------------------------------------------------------------
| 28 | Image1.jpg | NULL | NULL |
| 29 | Image7.jpg | NULL | NULL |
| 30 | Picture_Test.png | NULL | NULL |
-------------------------------------------------------------------------
谢谢你的任何建议。
解决方案
您可以执行以下操作:
INSERT INTO Child
(
Id
,De
,Fr
,En
)
OUTPUT Inserted.Id INTO #Temp
SELECT Id
,De
,Fr
,En
FROM @Values --If you are using a table type to insert into the Child table as a set based approach
;WITH CTE
AS
(
SELECT ROW_NUMBER() OVER(ORDER BY Id) AS Rnk
,Id
FROM #Temp
)
,CTE1 AS
(
SELECT ROW_NUMBER() OVER(ORDER BY Id) AS Rnk
,*
FROM Parent
)
UPDATE cte1
SET TranslationId = cte.Id
FROM CTE1 cte1
JOIN CTE cte ON cte.Rnk = cte1.Rnk
推荐阅读
- mysql - 无法打开 mysql-workbench
- excel - 为 3 个电子表格中不匹配的特定行 ID 创建表输出
- excel - DAX Error: Expressions that yield variant data-type cannot be used to define calculated columns
- keras - 如何规范化多输入神经网络?
- css - 上移按钮以选择旁边
- javascript - 根据 Angulajs 中的无线电选择更改变量
- c# - 需要帮助从 C# 诊断 SQL Server 奇怪的查询超时
- ios - Unity3d IOS 应用程序:使用 Application.OpenURL 打开第三方应用程序时出错
- angular - 在 Angular 7 中将数据解析为 in-memory-web-api
- java - 代理身份验证器对 HTTP 但不是 HTTPS 进行验证。为什么?