我有3张桌子:
资源表:ResourceID,ResourceValue,ProjectName
翻译表:ResourceID,translatedValue,language。(这是保存resourceValue的所有当前翻译的表。基本上,资源表中的一个resourceValue将转换为多语言版本并插入此表。)
TranslationPool:ResourceValue,TranslatedValue,language。(这是一个保存resourceValue的所有类型翻译的池,可能使用也可能不使用)
我想在SQL server中编写一个存储过程,该参数是一个projectName,它将检查该projectName下的所有resourceValue是否在Translation表中有翻译,对于没有翻译的所有resourceValue在翻译表中,插入来自TranslationPool的尊重翻译。
我知道我需要使用merge子句,但我不知道如何编写涉及3个表的merge子句,因为我想从TranslationPool中插入Translation表中不存在的所有翻译,但它们不是通过外键直接连接的。
答案 0 :(得分:0)
这将为您提供一个良好的开端。你甚至不需要任何merge
或join
,你仍然可以实现它。
CREATE PROCEDURE some_procedure
@projectName VARCHAR(100) --Input from the user
AS
BEGIN
DECLARE
@totalRows INT
--What happen is, if the resourceValue is already existed in the Translation_table,
--it will return count more than 0
SET @totalRows = (SELECT count(resourceValue) FROM Translation_table WHERE resourceValue = @projectName)
--And if that happen, you can simply display some message saying that the resourceValue has already existed
IF (@totalRows > 0)
BEGIN
--Already exist
END
--If the count is 0, meaning there is nothing, then you will "copy" from the Pool
ELSE
BEGIN
INSERT INTO Translation_table
SELECT FROM TranslationPool WHERE resourceValue = @projectName
END
END