2015-10-23 51 views
0

我有一個.csv文件,其中包含100 product_ids的列表。我有一個SQL Server表(其中包含product_id列(4000+個ID)和一個product_description列)。結合多個查詢並返回

我想要做的是取.CSV列表product_ids並在表上運行查詢以返回相關product_description的列表。

所以我簡單的查詢將

select product_description 
from tablename 
where product-id = xxxxxxx. 

但是我怎麼提供xxxxxx爲列表(也許我只是單獨用逗號?),並轉儲輸出到另一個CSV。

+0

所以,你想把你的CSV的ID列表放入查詢中? –

+0

請參閱[「應該在其標題中包含」標籤?「](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),其中共識是「不,他們不應該」! –

+0

你可以節省你的時間與MS - 辦公室,甚至與openoffice本身。 快捷鍵過濾器(Alt + D + F + F)。 – Ragul

回答

0

難道你不能將CSV中的ID複製並粘貼到查詢中嗎?

SELECT 
    product_id 
    , product_description 
FROM <table> 
WHERE product_id in (<<list of values from CSV>>). 

因爲它們在CSV是已經,他們應該用逗號分隔,這樣你就可以輕鬆地將它們插入到你的查詢(如果你打開你的文件有文本編輯器)。

或者,您可以從SQL做的一切,就像這樣:

CREATE TABLE #TempTable (
    ID integer 
    , col2 .. 
    , col3 .. 
    etc.) 
GO 

BULK INSERT #TempTable 
    FROM 'C:\..\file.csv' 
    WITH 
    (
    FIRSTROW = 2,   -- in case the first row contains headers (otherwise just remove this line) 
    FIELDTERMINATOR = ',', -- default CSV field delimiter 
    ROWTERMINATOR = '\n', 
    ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv', 
    TABLOCK 
    ) 

然後只需運行:

SELECT 
    product_id 
    , product_description 
FROM <table> 
WHERE product_id in (SELECT ID FROM #TempTable) 

如果你想這個結果導出到另一個CSV則:

INSERT INTO OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0' 
    ,'Text;Database=D:\;HDR=YES;FMT=Delimited' 
    ,'SELECT 
      product_id 
     , product_description 
     FROM <table> 
     WHERE product_id in (SELECT ID FROM #TempTable)') 
+0

由於拉杜,我已經創建了一個臨時表:創建表#tmptable ( PRODUCT_ID VARCHAR(30), Product_desc VARCHAR(100), Product_long_desc VARCHAR(2000), )從「C – user2988641

+0

然後批量插入#tmptable: \ Chris \ portal.txt'(FieldTerminator ='\ t',RowTerminator ='\ n') go)。但是,sql錯誤消息表示消息4832,級別16,狀態1,行1 批量加載:在數據文件中遇到意外的文件結尾。 Msg 7399,Level 16,State 1,Line 1 鏈接服務器「(null)」的OLE DB提供程序「BULK」報告了錯誤。提供者沒有提供任何關於錯誤的信息。 Msg 7330,Level 16,State 2,Line 1 無法從鏈接服務器「(null)」的OLE DB提供程序「BULK」中獲取一行。 Msg 102,Level 15,State 1,Line 1 ')'附近語法不正確。 – user2988641

+0

Bulk'insert #tmptable from'C:\ Chris \ portal.txt' with(FieldTerminator =',',RowTerminator ='\ n') go仍然返回消息4863,Level 16,State 1,Line 1 Bulk加載第1行第1列(Product_id)的數據轉換錯誤(截斷)。 – user2988641