2013-04-10 83 views
2

我正在做一個系統之間的數據轉換,並準備了一個select語句,標識從table1提取的必要行並將其加入table2以顯示一對支持列。此選擇語句還會將空白列放入結果中,以便將上載結果格式化爲目標系統。sql select into subquery

除了這個查詢之外,我還需要更新一些列值,我希望在新表中的單獨語句操作中進行更新。因此,我有興趣在SELECT INTO內將上述select語句作爲子查詢運行,這將基本上將結果放到暫存表中。

SELECT 
    dbo_tblPatCountryApplication.AppId, '', 
    dbo_tblPatCountryApplication.InvId, 
    'Add', dbo_tblpatinvention.disclosurestatus, ... 
FROM 
    dbo_tblPatInvention 
INNER JOIN 
    dbo_tblPatCountryApplication ON dbo_tblPatInvention.InvId = dbo_tblPatCountryApplication.InvId 
ORDER BY 
    dbo_tblpatcountryapplication.invid; 

我想執行上述語句,以便將結果轉儲到新表中。任何人都可以請告知如何將語句嵌入子查詢中,該子查詢將很好地與SELECT INTO匹配?

+2

你知道sql中的INSERT是幹什麼的嗎? – marko 2013-04-10 14:38:39

回答

0

嘗試

INSERT INTO stagingtable (AppId, ...) 
SELECT ... --your select goes here 
0

如果臨時表不存在,並且要在插入時創建它,然後嘗試以下方法:

SELECT dbo_tblPatCountryApplication.AppId,'', dbo_tblPatCountryApplication.InvId, 
     'Add', dbo_tblpatinvention.disclosurestatus ....... 
INTO StagingTable 
FROM dbo_tblPatInvention 
INNER JOIN dbo_tblPatCountryApplication 
       ON dbo_tblPatInvention.InvId = dbo_tblPatCountryApplication.InvId; 

如果你想插入它們按照特定的順序然後使用from子句中的子查詢嘗試使用:

SELECT * 
INTO StagingTable 
FROM 
(
    SELECT dbo_tblPatCountryApplication.AppId, '', dbo_tblPatCountryApplication.InvId, 
      'Add', dbo_tblpatinvention.disclosurestatus ....... 
    FROM dbo_tblPatInvention 
    INNER JOIN dbo_tblPatCountryApplication ON 
       dbo_tblPatInvention.InvId = dbo_tblPatCountryApplication.InvId 
    order by dbo_tblpatcountryapplication.invid 
) a; 
1

您可以簡單地添加一個INTO cl澳洲英語到現有的查詢來創建充滿了查詢結果的新表:

SELECT ... 
INTO MyNewStagingTable -- Creates a new table with the results of this query 
FROM MyOtherTable 
    JOIN ... 

但是,你必須確保每列都有一個名稱,如:

SELECT dbo_tblPatCountryApplication.AppId, -- Cool, already has a name 
    '' AS Column2, -- Given a name to create that new table with select...into 
    ... 
INTO MyNewStagingTable 
FROM dbo_tblPatInvention INNER JOIN ... 

而且,您也可以使用aliases for your tables來使代碼更具可讀性;最後

SELECT a.AppId, 
    '' AS Column2, 
    ... 
INTO MyNewStagingTable 
FROM dbo_tblPatInvention AS i 
    INNER JOIN dbo_tblPatCountryApplication AS a ON i.InvId = a.InvId 
ORDER BY a.InvId 

注意的一點是,它看起來奇怪,命名你的表dbo_tblXXX爲DBO通常模式名,並從表名以點符號,例如分離dbo.tblXXX。我假設在添加into子句之前,您已經有了一個完整的select查詢。有些人還考慮在數據庫中使用匈牙利符號(tblName)作爲一種反模式來避免。