我偶尔会收到修改某些数据的一次性请求,并且该请求附带一些 CSV 值。有没有办法可以快速轻松地将任意 CSV 视为表格或行源,甚至将其视为内联数据?
例如,我可以做类似的事情吗:
SELECT * FROM SomeSpecialCommand('
147074,13
153987,16
147075,3
176405,16
176437,25
176436,14
176406,14
176439,13
176407,13
') as MyInlineCSV
促使我这样做的原因是要求修改约 100 件商品的库存水平,并且我收到了一个带有 SKU 编号和数量的 CSV(如上所示)。
答案1
你可能想要利用一种叫做用户定义表值函数。基本上,您将创建一个函数,该函数采用单个 nvarchar(max) 参数并创建一个从 CSV 输入返回的表。实际上,您可以采用几十种方法(使用数字表、使用 XML 类型、使用循环等),但这种方法已经过时了经过一些聪明的 Sql 人员的详细记录和测试,所以我就直接给你指出那里。一定要仔细阅读评论部分,因为针对不同的数据大小、环境等都有替代解决方案和测试结果 - 只需选择最适合您的解决方案。
答案2
不幸的是,您不能这样做。您可以创建一个指向 excel 文件的链接服务器。您可以将其用作“实用程序”链接服务器,并将随机文件保存为正确的 .xls 文件,然后您就可以从工作表中进行选择。
答案3
一定要使用 sql-server 吗?
有数据库::CSV对于 perl 来说,它可以解决简单的修改,而不需要从数据库现有的其他表中提取数据。