用于打开文件的 SQL 用户定义函数
Posted
技术标签:
【中文标题】用于打开文件的 SQL 用户定义函数【英文标题】:SQL Userdefined function to open files 【发布时间】:2013-10-15 14:57:55 【问题描述】:我想创建一个用户定义的函数/存储过程或其他 SQL 机制,当传递一个文件名时,它会将文件内容读入一个变量以供以后处理。该机制必须在事务中工作。
我的计划是使用用户定义的函数,但是 OPENROWSET 函数不允许我将变量作为文件名传递,因此我需要在“sp_executesql”语句中执行它,并且该函数变得不确定。
我可以使用任何变通方法来绕过非确定性函数吗?
【问题讨论】:
那个文件名在哪里?是在客户端还是在 SQL 服务器上? 【参考方案1】:是的,您可以使用 SQL Server 从开发人员提供的 DLL 调用的所谓“CLR 函数”函数。详情见http://technet.microsoft.com/en-us/library/ms189876.aspx
但请注意,从服务器端处理文件不是具有重大安全问题的可扩展解决方案。
【讨论】:
【参考方案2】:CLR 选项将为您提供所需的一切(请参阅@Dewfy 的 cmets),但如果您的数据允许,另一种选择是执行 bulk insert
。它也不是可扩展的,多个用户同时执行此操作的问题,但也许您的情况允许这样做??
【讨论】:
以上是关于用于打开文件的 SQL 用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章
Oracle用户无法打开SQL文件!提示:SP2-0310: 无法打开文件 "skeleton.sql"
Python3 open() 函数-用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。