我正在尝试编写一个存储过程,将一个表的内容转换为另一个表,但我不知道从哪里开始。在我的场景中,我有4个表:[Source],[Type_A],[Type_B]& [目的地]。
[Source]有2列,其值需要转移到[Destination]。 [Source]中的一列是“type”(鉴别器)。
如果“type”为0,那么我需要从[Type_A]&中提取列的子集。添加一些静态值,为[Destination]添加记录。
如果“type”为1,那么我需要从[Type_B]&中提取列的子集。添加一些记录到[目的地],添加了一些不同的静态值。
每次执行此存储过程时将处理可变数量的记录,这些记录将由用户从ASP.NET应用程序调用。
我是SQL中的新手,所以如果解决方案很简单,请原谅我。我知道我可以在代码(C#)中迭代地执行此操作,但我宁愿避免多个DB调用的开销。希望整个事情都包含在交易中。
如果有人能说明我如何能够做到这一点,我将非常感激。
谢谢!
答案 0 :(得分:2)
假设您在Source,Type_A和Type_B之间有关系:
INSERT INTO Destination
(Col1, Col2, Col3, Col4, Col5)
SELECT s.Col1,
s.type,
/* The next two columns illustrate choosing a */
/* subset from either Type_A or Type_B */
COALESCE(a.Col3, b.Col3),
COALESCE(a.Col4, b.Col4),
/* The next column illustrates choosing a */
/* static value based on Source.type */
CASE WHEN s.type = 0 THEN 'Static Value 1'
WHEN s.type = 1 THEN 'Static Value 2'
ELSE NULL
END /* CASE */
FROM Source s
LEFT JOIN Type_A a
ON s.Col1 = a.Col1
AND s.type = 0
LEFT JOIN Type_B b
ON s.Col1 = b.Col1
AND s.type = 1