使用多个表中的值插入一行(SQL Server)

时间:2010-11-16 05:14:01

标签: sql triggers insert row

我正在定义一个删除触发器,我需要备份已删除的行但只包含原始的一些参数,并包括其他表中的一列:
表C:
*第1列:表A中列的值 *第2至6列:来自TableB的第1,2,3,5,6列的值

我想要的就是这样:

INSERT into TableC values (
(SELECT Column1A from TableA where TableA.Column = 'SomeValue'),
(SELECT column1, column2, column3, column5, column6 from TableB));

TableC上的结果必须是:
Column1A,column1,column2,column3,column5,column6

但这不起作用。 在我的特殊情况下,TableB是只能在触发器中访问的已删除表。

我正在使用SQL-Server 2008,但我需要的只是查询的逻辑,然后我尝试翻译它。

谢谢。

3 个答案:

答案 0 :(得分:1)

您需要在选择上进行连接 这是一个例子:

INSERT INTO MyTable
SELECT 
    Table1.ColumnA,
    Table1.ColumnB,
    Table2.ColumnA,
    Table2.ColumnB
FROM
    Table1
    INNER JOIN Table2 ON Table1.ID = Table2.ID  

这只是“从两张桌子插入”的一个例子 你需要修改它以匹配你正在寻找的东西,我从你任意的例子中无法理解。

答案 1 :(得分:1)

在另一个案例中,我真的觉得很奇怪,可能更接近你所描述的内容,这可能有用:

INSERT INTO MyTable
SELECT 
    (SELECT ColumnA FROM Table1),
    Table2.ColumnA,
    Table2.ColumnB,
    Table2.ColumnC,
    Table2.ColumnD
FROM
    Table2

这样,您只需从Table1中选择一列,但从Table2中选择多列,无论它们之间是否存在任何关系。

答案 2 :(得分:1)

您可以使用cross join加入不相关的表格:

INSERT  MyTable
        (col5, col7)
SELECT  t1.col5
,       t2.col7
FROM    Table1 t1
CROSS JOIN 
        Table2 t2
WHERE   t1.ID = 'SomeValue'
        and t2.ID = 'OtherValue'

如果其中一个表只包含一行,则可以省略where部分。