SQL Server:在IN()子查询中使用OPENROWSET结果
我有一个包含数千个SKU的.CSV文件。我想在数据库中查找此.CSV文件中列出的SKU的可用数量 到目前为止,我所拥有的是:假设有两个SKU被命名为ABC和XYZ SQL Server 2008 R2上的SQL: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',
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,但结果仍然为空。请检查我的答案,看是否可行