Ich habe eine .CSV
Datei mit Tausenden von SKUs. Ich möchte die verfügbaren Mengen in meiner Datenbank nur für die SKUs suchen, die in dieser .CSV
Datei aufgelistet sind.SQL Server: Verwenden von OPENROWSET Ergebnisse innerhalb einer IN() - Unterabfrage
Hier ist, was ich bisher: (Sagen wir mal ein paar SKUs sind "ABC" genannt und "XYZ")
Die SQL (auf 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)
der CSV Datei (skus.csv):
ABC
XYZ
...
Die XML-Format-Datei (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>
Wenn ich die SELECT... OPENROWSET()
-Anweisung selbst ausführe, wird wie erwartet eine einzelne Spalte von SKUs zurückgegeben. Wenn ich es jedoch als Unterabfrage innerhalb von IN()
verwende, sind die Ergebnisse leer.
Ich erwarte die Ergebnisse die SKUs aus der skus.csv
Datei und ihre Mengen aus der Inventory
Datenbank. Was mache ich hier falsch?
Danke!
könnte Datentypkonflikt ... nvarchar von csv, aber aus der Tabelle? – maSTAShuFu
Das klingt plausibel. Die 'sku'-Spalte in der Datenbank hat den Typ' CHAR'. Wie würde ich alle SKU-Werte als einen bestimmten Datentyp darstellen? Ich habe versucht, das "COLUMN" -Element in der Formatdatei auf 'xsi: Typ' s SQLCHAR, SQLVARYCHAR, SQLNCHAR und SQLNVARCHAR, aber die Ergebnisse sind immer noch leer. – Jason
Bitte überprüfen Sie meine Antwort, ob das funktioniert – maSTAShuFu