我有一個包含數千個SKU的.CSV
文件。我想查詢我的數據庫中的可用數量,僅查找此.CSV
文件中列出的SKU。SQL Server:在IN()子查詢中使用OPENROWSET結果
這是我到目前爲止有:(比方說,一對夫婦的SKU被命名爲 「ABC」 和 「XYZ」)
的SQL(SQL Server 2008 R2上):
SELECT
[sku], [qty]
FROM
[Inventory]
WHERE
[sku] IN (SELECT skuColumn
FROM OPENROWSET(BULK 'C:\skus.csv',
FORMATFILE='C:\skusFormat.xml') AS data)
的CSV文件(skus.csv):
ABC
XYZ
...
的XML格式的文件(skusFormat.xml):
<?xml version="1.0" ?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\n" MAX_LENGTH="40" />
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="sku" xsi:type="SQLNVARCHAR" />
</ROW>
</BCPFORMAT>
當我自己運行SELECT... OPENROWSET()
聲明時,會返回一列SKU - 正如預期的那樣;但是,當我在IN()
內將它用作子查詢時,結果爲空。
我期待的結果是來自skus.csv
文件的SKU和來自Inventory
數據庫的數量。我在這裏做錯了什麼?
謝謝!
可能是數據類型不匹配......爲nvarchar從CSV但是從表? – maSTAShuFu
這聽起來似乎合理。數據庫中的'sku'列是'CHAR'類型。我將如何將所有SKU值轉換爲某種數據類型? 我試着將格式文件中的'COLUMN'元素設置爲'xsi:type'的SQLCHAR,SQLVARYCHAR,SQLNCHAR和SQLNVARCHAR,但結果仍爲空。 – Jason
請檢查我的答案,看看是否會工作 – maSTAShuFu