sql - 在 sql server 中为父记录插入正确的详细信息
问题描述
我正在编写要在 SQL Server 上执行的以下脚本。我需要确保正确的外键记录映射到父表。如果您在下面看到我正在硬编码外键并假设它会按顺序执行并且会很好。我有大约 100 多条记录要插入。我需要知道在插入详细记录之前有办法检查正确的父 ID。
主表
insert into multilingual.OnScreenText (applicationcode,OnScreenTextCode)
values ('MASTERDATA','DETAILS.COMPANY_INFORMATION.FULL_LEGAL_NAME')
insert into multilingual.OnScreenText (applicationcode,OnScreenTextCode)
values ('MASTERDATA','DETAILS.COMPANY_INFORMATION.COMPANY_REGISTRATION_NUMBER')
insert into multilingual.OnScreenText (applicationcode,OnScreenTextCode)
values ('MASTERDATA','DETAILS.COMPANY_INFORMATION.TEXT')
国外表
insert into multilingual.OnScreenTextTranslation (OnScreenTextId,LanguageCode,DefaultLanguage,OnScreenTextValue)
values (1,'en-GB', 1,'Full legal name')
insert into multilingual.OnScreenTextTranslation (OnScreenTextId,LanguageCode,DefaultLanguage,OnScreenTextValue)
values (1,'fr-FR',0,'Nom légal complet')
insert into multilingual.OnScreenTextTranslation (OnScreenTextId,LanguageCode,DefaultLanguage,OnScreenTextValue)
values (2,'en-GB', 1,'Company registration number')
insert into multilingual.OnScreenTextTranslation (OnScreenTextId,LanguageCode,DefaultLanguage,OnScreenTextValue)
values (2,'fr-FR',0,'Numéro d''entreprise')
insert into multilingual.OnScreenTextTranslation (OnScreenTextId,LanguageCode,DefaultLanguage,OnScreenTextValue)
values (3,'en-GB', 1,'To update your full legal name or company registration number please contact your Anglo American Relationship Manager')
insert into multilingual.OnScreenTextTranslation (OnScreenTextId,LanguageCode,DefaultLanguage,OnScreenTextValue)
values (3,'fr-FR',0,'Pour mettre à jour votre nom légal complet ou le numéro d''enregistrement de votre société, veuillez contacter votre responsable des relations avec Anglo American.')
解决方案
“我正在硬编码外键并假设它会按顺序执行并且会很好。”
一个好的方法假设什么。在这种情况下,未提供表的 DDL,但似乎“multilingual.OnScreenText”表具有 IDENTITY 属性的整数主键。如果是这样,则可以使用 SCOPE_IDENTITY() 函数访问插入的标识值。
请求是一个脚本。以下设置 NO COUNT ON(以减少消息传递)并设置 XACT_ABORT ON 以确保任何事务回滚适用于所有 DML 语句。在每次 INSERT 到 'multilingual.OnScreenText' 之后,脚本会测试以确保实际插入了一行 (@@rowcount>0)。如果插入了一行,则生成的标识值将分配给@id 变量,并在随后的 INSERT 中使用到“multilingual.OnScreenTextTranslation”表。像这样的东西
set nocount on;
set xact_abort on;
begin transaction
declare @id int;
insert into multilingual.OnScreenText (applicationcode,OnScreenTextCode) values
('MASTERDATA','DETAILS.COMPANY_INFORMATION.FULL_LEGAL_NAME');
if @@rowcount>0
begin
select @id=cast(scope_identity() as int);
insert into multilingual.OnScreenTextTranslation (OnScreenTextId,LanguageCode,DefaultLanguage,OnScreenTextValue) values
(@id,'en-GB', 1,'Full legal name'),
(@id,'fr-FR',0,'Nom légal complet');
end
insert into multilingual.OnScreenText (applicationcode,OnScreenTextCode) values
('MASTERDATA','DETAILS.COMPANY_INFORMATION.COMPANY_REGISTRATION_NUMBER');
if @@rowcount>0
begin
select @id=cast(scope_identity() as int);
insert into multilingual.OnScreenTextTranslation (OnScreenTextId,LanguageCode,DefaultLanguage,OnScreenTextValue) values
(@id,'en-GB', 1,'Company registration number'),
(@id,'fr-FR',0,'Numéro d''entreprise');
end
insert into multilingual.OnScreenText (applicationcode,OnScreenTextCode) values
('MASTERDATA','DETAILS.COMPANY_INFORMATION.TEXT');
if @@rowcount>0
begin
select @id=cast(scope_identity() as int);
insert into multilingual.OnScreenTextTranslation (OnScreenTextId,LanguageCode,DefaultLanguage,OnScreenTextValue) values
(@id,'en-GB', 1,'To update your full legal name or company registration number please contact your Anglo American Relationship Manager'),
(@id,'fr-FR',0,'Pour mettre à jour votre nom légal complet ou le numéro d''enregistrement de votre société, veuillez contacter votre responsable des relations avec Anglo American.');
end
commit;
推荐阅读
- android - Startactivity(intent) 处理无效的 url
- jquery - 找不到 jQuery:未捕获的 ReferenceError:$ 未定义
- selenium - 无法在硒中找到元素
- laravel-5 - 如何通过连接默认数据库从某个表中动态获取变量并在laravel的database.php文件中使用该变量
- asp.net-core-mvc - 在 .net core 2.0 中添加到数据库之前更改模型
- typescript - 两个错误:1.Unable to compile TypeScript 2.Process exited with error code 100
- neo4j - 在 Neo4j 中使用密码的 Strahler 流排序
- python - Python - 对每行小于其他两列的列求和
- python - 当用户在 Django REST api 中输入时如何同时运行 python 脚本?
- javascript - 如何编写 next.config.js 文件