SQL Server:在IN()子查询中使用OPENROWSET结果

SQL Server:在IN()子查询中使用OPENROWSET结果,sql,sql-server,csv,sql-server-2008-r2,Sql,Sql Server,Csv,Sql Server 2008 R2,我有一个包含数千个SKU的.CSV文件。我想在数据库中查找此.CSV文件中列出的SKU的可用数量 到目前为止,我所拥有的是:假设有两个SKU被命名为ABC和XYZ SQL Server 2008 R2上的SQL: SELECT [sku], [qty] FROM [Inventory] WHERE [sku] IN (SELECT skuColumn FROM OPENROWSET(BULK 'C:\skus.csv',

我有一个包含数千个SKU的.CSV文件。我想在数据库中查找此.CSV文件中列出的SKU的可用数量

到目前为止,我所拥有的是:假设有两个SKU被命名为ABC和XYZ

SQL Server 2008 R2上的SQL:

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>
当我运行选择。。。OPENROWSET语句本身返回一列SKU——正如预期的那样;但是,当我将其用作中的子查询时,结果为空

我希望结果是SKUs.csv文件中的SKU以及库存数据库中的SKU数量。我做错了什么


谢谢

可能是数据类型不匹配 并且使用存在,而不是在

SELECT [sku], [qty]
FROM [Inventory] x
WHERE EXISTS (
    SELECT 1 FROM OPENROWSET(
        BULK 'C:\skus.csv',
        FORMATFILE='C:\skusFormat.xml'
    ) AS data
    where cast(data.skuColumn as char(10)) = x.sku
)

可能是数据类型不匹配。。。nvarchar来自csv,但来自表格?听起来似乎有道理。数据库中的sku列为CHAR类型。如何将所有SKU值转换为特定的数据类型?我已尝试将format文件中的COLUMN元素设置为xsi:types SQLCHAR、SQLVARYCHAR、SQLNCHAR和SQLNVARCHAR,但结果仍然为空。请检查我的答案,看是否可行