2017-02-07 186 views
1

我知道如何從另一個表格中選擇插入,但我的問題並不複雜。我有下面的表格。SQL Server:插入表格從另一個表格中選擇

表1:

Col1 | Col2 | Col3 | ..... | Col20 

表2:

Col1 | Col2 | Col3 | ..... | Col20 

兩個表是相同的。我想要做的是將表1中的所有值插入到表2中,但留下一列(比如Col20)。我想用我的自定義值插入該列。我可以通過映射如下的1到1列來做到這一點。

Insert into table1(Col1, Col2, ..., Col20) 
    select Col1, Col2, ..., @customvalue 
    from table2 

我會去用這種方式,但我不得不使用此查詢多個時間內的存儲過程,這使得該存儲過程冗長。但我想縮短這個查詢。還有其他更好的方法嗎?

+1

你可以封裝了insert語句爲存儲過程或UDF,正如你只想執行它instide主過程多次。沒有更好的方法來執行插入...選擇。 –

+0

我不熟悉存儲過程中的封裝這個術語。你能否給我提供任何有助於理解我的參考資料? @Zohar – Amir

+1

封裝,在這種情況下,僅僅意味着創建將執行的刀片(在這種情況下存儲過程或UDF)的方法。然後,您可以執行該方法,而不是每次寫入insert語句。 –

回答

1

...但我不得不使用此查詢多個時間內的存儲過程,這使得該存儲過程冗長....

最簡單的事情是創建一個存儲過程,將只做插入,然後調用它,只要你需要在你的主存儲過程:

CREATE PROCEDURE CopyFromTable1ToTable2 
(
    @CustomValue int -- or whatever data type you need 
) 
AS 

INSERT INTO Table1 (Col1, Col2... Col120) 
SELECT Col1, Col2,.... @CustomValue 
FROM Table2 

然後,在你的主要過程,只是這樣做:

EXEC CopyFromTable1ToTable2 1 
... 
EXEC CopyFromTable1ToTable2 3 

等等。

+0

謝謝。這將是更好的方式。 – Amir

0

嘗試是否可以使用用戶定義的表類型用於第二個表列集。將table2中所有必需的列定義爲這種新的表類型。然後使用這個表類型對象在查詢中使用它來減少所需的代碼。您可以構建新的UDF以重複使用,並將此新類型作爲其參數之一傳遞。

https://technet.microsoft.com/en-us/library/bb522526(v=sql.105).aspx

我猜你將能夠減少您的存儲過程中一些重複的SQL代碼。它會讓你的代碼更加模塊化和整潔。

相關問題