我的SQL 2012 DB中有两个表。表:航程和国家。
表Voyages包含信息“destinationID”(表示相应的countryID)。正在从包含国家/地区名称的文本文件导入Voyages的数据。 我想要实现的目标如下:
我知道我可以通过解析文本文件,提取国家/地区名称并将其添加到数据库以获取新的countryID来在我的应用程序中执行此操作。然后我可以使用新ID添加新的Voyages行。但我还可以在DB中完成整个工作吗?我想过使用Trigger。
但是我会遇到问题,我最初必须在Voyages表中插入一个国家/地区名称字符串,而最后我想插入一个countryID(int)。
这将是某种我真的不喜欢的解决方法:
INSERT INTO voyages (voyageID, destinationID, destinationString) VALUES (1, 0, "BRAZIL");
像这样,我可以创建一个Trigger(INSTEAD OF INSERT)来提取destinationString以插入一个新的国家行:
INSERT INTO countries (countryName) VALUES ("BRAZIL");
然后可以在我的触发器中使用生成的countryID(例如27)来最终将新行插入到航行中:
INSERT INTO voyages (voyageID, destinationID, destinationString) VALUES (1, 27, NULL);
还有更优雅的方法吗?
非常感谢!
答案 0 :(得分:1)
我在评论中提到了存储过程作为此类问题的最佳解决方案。以下是它的外观示例:
CREATE PROCEDURE uspInsertVoyage
(
@voyageID INT,
@destinationString NVARCHAR(50)
)
AS
BEGIN
DECLARE @destinationID INT;
IF NOT EXISTS (SELECT * FROM Countries WHERE countryName = @destinationString)
BEGIN
INSERT INTO countries (countryName) VALUES (@destinationString)
END;
SELECT @destinationID = countryID FROM Countries WHERE countryName = @destinationString;
INSERT INTO voyages (voyageID, destinationID, destinationString) VALUES (@voyageID, @destinationID, NULL);
END