2010-11-16 69 views
1

我正在定義刪除觸發器,我需要備份已刪除的行,但只包含來自原始數據的幾個參數,並且包括來自其他表的一列:
TableC :
* 1列:從列值在表A
*列2至6:從表B用多個表中的值插入行(SQL Server)

值從colums 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,但我需要的是查詢的邏輯,然後我嘗試將其翻譯。

謝謝。

回答

1

在另一種情況下,我真的覺得很奇怪,這可能是更接近你所描述的東西,這可能工作:

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

這樣的話,你只能選擇從Table1一列,然而從Table2中選擇很多列,而不管它們之間的任何關係。

+0

這就是我一直在尋找的!謝謝你的快速回答。 – fern17 2010-11-16 05:50:52

+0

顯然,如果'Table1'返回多於一行,就會中斷;所以你必須確保你只在這個獨特的條件下運行它。 – BeemerGuy 2010-11-16 05:51:42

+0

是的,我明白了。但這就是這種情況:) – fern17 2010-11-16 05:53:01

1

您需要對select進行連接。
下面是一個例子:

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

這僅僅是「從兩個表中插入」的一個例子。
您需要對其進行修改以符合您要查找的內容,這是我從您的任意示例中無法理解的。

+0

這是正確的,但兩個表是不相關的! 第一張表只包含一個索引,第二個值... – fern17 2010-11-16 05:27:35

+0

我會保留這個答案給其他人蔘考;檢查我的其他答案。 – BeemerGuy 2010-11-16 05:34:52

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一部分吧。

+0

我以Beemer說的方式做了。我不明白這種方式:(但謝謝你的快速答案! – fern17 2010-11-16 05:50:05